我创建了自己的会话,并在其后加上WebSession
。在Tomcat控制台中,我可以看到正在抛出异常:
pqlrd.is.seguridad.SesionPQLRD cannot be cast to org.apache.wicket.Session
我的扩展WebSession:
package pqlrd.is.seguridad;
import org.apache.wicket.Session;
import org.apache.wicket.protocol.http.WebSession;
import org.apache.wicket.request.Request;
import pqlrd.domain.AccesoWeb;
import pqlrd.domain.Usuario;
public final class SesionPQLRD extends WebSession {
public SesionPQLRD(Request request) {
super(request);
// TODO Auto-generated constructor stub
}
private AccesoWeb acceso;
public AccesoWeb getUsuario() {
return acceso;
}
public void setUsuario(AccesoWeb usuario) {
this.acceso = usuario;
}
public static SesionPQLRD getSesionPQLRD(){
return (SesionPQLRD) Session.get();
}
public boolean estaLogeado(){
return (acceso!=null);
}
}
最佳答案
仅仅因为SessionPQLRD
是-a WebSession
(因此Session
)并不意味着WebSession
是-a SessionPQLRD
。您试图将WebSession
强制为SesionPQLRD
,但是除非Wicket知道使用自定义会话而不是自定义会话,否则它将返回框架的默认值。
简而言之,您不能强迫超类像子类一样工作,除非它实际上可以履行子类的契约。考虑一个Animal
接口,一个ZooAnimal
实现和一个Zebra
子类。 ZooAnimal
可能不是Zebra
,而可能是Giraffe
。