1

これはonSubmit()私のWicket1.5アプリケーションのログインページの方法です。

@Override
public void onSubmit() {
    super.onSubmit();
User theUser = loginForm.getModelObject();

/* call a DAO function to check the user's credentials */
if(/* DAO call succeeds*/) {
    MyCustomeSession authSession = (MyCustomSession)Session.get();
        authSession.success("Welcome, " + theUser.getFullName());
    setResponsePage(new HomePage());
}
else {
    loginForm.error("Username or password was incorrect");
}   
}

これは、最初のログイン、およびログアウトしてから再度ログインする場合に正常に機能します。次に表示されるのは、ウェルカムメッセージのあるホームページです。

セッションがタイムアウトすると、このアプリケーションはユーザーをこの同じログインページにリダイレクトし、「セッションの有効期限が切れました」というフィードバックメッセージを表示して、ユーザーがユーザー名とパスワードを再度入力できるようにします。ユーザーがこれを行うと、ログインは成功します。非表示にされたメニューが表示され、ウェルカムメッセージが表示されます。

ただし、表示されるページはログインページのままで、必要なユーザー名とパスワードに関する追加のフィードバックメッセージが表示されます(両方が入力され、ログインが成功した場合でも)。これがクリップされたスクリーンショットです:

セッションタイムアウト後のフィードバックパネル

これはWicketの奇妙なことですか?修正または回避策はありますか?

4

1 に答える 1

4

さて、であるページはapplication.setPageExpiredErrorPage(page)後で行うことはできませんが、setResponsePage(new HomePage());代わりに行う必要があるようですsetRepsonsePage(HomePage.class);

一方、このLoginPageが通常のページである場合、つまり最初のログイン時またはログアウト後は、これを使用する必要があります。setResponsePage(new HomePage()); これはあまり意味がありませんが、Wicketの方法のようです。

そこで、呼び出されたLoginPageコンストラクターにブール値を追加し、それに応じisTimeoutてのいずれかのバージョンを呼び出しsetResponsePageました。

于 2012-04-17T15:11:00.710 に答える