2012-04-16 52 views
1

這是我的Wicket 1.5應用程序的登錄頁面的onSubmit()方法:檢票setResponsePage

@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"); 
} 
} 

這工作正常進行初始登錄,並註銷再重新登錄,在接下來的事情見過是歡迎消息的主頁。

一旦會話超時,此應用程序的用戶重定向回此相同的登錄頁面,以反饋消息「您的會話已過期等等,等等」,並允許用戶重新輸入用戶名和密碼。如果用戶這樣做,則登錄成功:隱藏的菜單變爲可見,歡迎消息顯示等。

但是,顯示的頁面仍然是登錄頁面,其中包含所需用戶名和密碼的其他反饋消息(即使兩者都已輸入並且登錄成功)。這裏是一個切出畫面截圖:

after session timeout feedback panel

這是檢票一些奇怪的事情嗎?有沒有修復或解決方法?

+0

這是出左外野,但你的setResponsePage後需要一個setRedirect(真)()?如果我在6個月內沒有編碼,我應該停止評論。 – jbrookover 2012-04-17 11:55:54

+0

@jbrookover:Wicket的Component類沒有setRedirect這樣的方法。你可能想過一個不同的框架? – cobaltduck 2012-04-17 15:12:16

+0

檢票1.4仍有[Component.setRedirect()](http://wicket.apache.org/apidocs/1.4/org/apache/wicket/Component.html#setRedirect(布爾值)),其可能解釋的混亂。 – Jonik 2012-04-17 17:46:12

回答

4

好吧,似乎是一個application.setPageExpiredErrorPage(page)頁面不能做一個setResponsePage(new HomePage());,但必須改爲setRepsonsePage(HomePage.class);

同時,當這個LoginPage只是一個普通頁面,即在初始登錄或註銷後,它必須使用setResponsePage(new HomePage());這沒有多大意義,但這似乎是Wicket的方式。

所以我給LoginPage構造函數添加了一個布爾值,名爲isTimeout,並相應地調用其中一個或另一個版本的setResponsePage