WebSession ClassCastException

WebSession ClassCastException,session,wicket,classcastexception,wicket-1.5,Session,Wicket,Classcastexception,Wicket 1.5,我一直在尝试对Wicket的WebSession进行子类化,以便实现一个基本的身份验证系统。我遵循了Wicket参考图书馆的指南。当我在我的网页中尝试以下操作时,我得到一个ClassCastException: ((AppSession)Session.get()).setUid() 以下是全部错误: java.lang.ClassCastException: org.apache.wicket.protocol.http.WebSession cannot be cast to com.ex

我一直在尝试对Wicket的WebSession进行子类化,以便实现一个基本的身份验证系统。我遵循了Wicket参考图书馆的指南。当我在我的网页中尝试以下操作时,我得到一个ClassCastException:

((AppSession)Session.get()).setUid()
以下是全部错误:

java.lang.ClassCastException: org.apache.wicket.protocol.http.WebSession cannot be cast to com.example.webapp.AppSession
我在网上搜索了几个小时,尽我所能。我真的很感谢你的帮助。另外,如果有更好的方法,请告诉我。我对维克特真的很陌生

多谢各位

AppSession.java

public final class AppSession extends WebSession {
    private Integer uid;

    public AppSession(Request request) {
        super(request);
    }

    public final Integer getUid() {
        return uid;
    }

    public final void setUid(Integer uid) {
        this.uid = uid;
    }

    public static AppSession get() {
        return (AppSession)Session.get();
    }
}
public class App extends WebApplication {
    public App() {
        super();
        new AnnotatedMountScanner().scanPackage("com.example.webapp").mount(this);
    }

    @Override
    public Session newSession(Request request, Response response) {
        return new AppSession(request);     
    }

    @Override
    public Class getHomePage() {
        return null;
    }
}
App.java

public final class AppSession extends WebSession {
    private Integer uid;

    public AppSession(Request request) {
        super(request);
    }

    public final Integer getUid() {
        return uid;
    }

    public final void setUid(Integer uid) {
        this.uid = uid;
    }

    public static AppSession get() {
        return (AppSession)Session.get();
    }
}
public class App extends WebApplication {
    public App() {
        super();
        new AnnotatedMountScanner().scanPackage("com.example.webapp").mount(this);
    }

    @Override
    public Session newSession(Request request, Response response) {
        return new AppSession(request);     
    }

    @Override
    public Class getHomePage() {
        return null;
    }
}

我也有自己的会话类,它是从
WebSession
派生而来的。我做一些事情和你不一样

添加
AppSession
方法:

/**
 * Gets the session for the calling thread.
 * @return
 *   The session for the calling thread.
 */
public static AppSession get()
{
  return (AppSession)Session.get();
}
你可能想试试

AppSession ssnSession = AppSession.get();
ssnSession.setUid(...);
而不是你的一个电话

您是否检查了(应用程序)会话类的软件包

(我个人不会为你的
App.getHomePage()
返回
null


这有什么帮助吗?

这不是多个用户的问题吗?AppSession的生命周期是吗?@monksy没有,因为
AppSession.get()
返回其web请求正在处理的用户的会话。这是正确的答案,尽管一行调用没有错。我一直在使用它:)MySession.get().getUsername()等等。