我创建了自己的会话,并在其后加上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

09-10 23:23