4

基本認証システムを実装できるように、Wicket の WebSession をサブクラス化しようとしています。私は Wicket リファレンス ライブラリのガイドラインに従いました。WebPage で次のことを試みると、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();
    }
}

App.java

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;
    }
}
4

1 に答える 1

1

私も、 から派生した独自のセッション クラスを持ってい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)Session クラスのパッケージを確認しましたか?

null(個人的には返品しませんApp.getHomePage()。)

これは役に立ちますか?

于 2012-12-07T12:13:02.667 に答える