2013-07-08 116 views
0

我有一個Wicket(6.0)應用程序。有一個LoginPage和一個OverviewPage。 LoginPage包含用戶可以進行身份​​驗證的表單。 認證後,用戶被重定向到OverviewPage。有關LoginPageWicket - 登錄,後退按鈕,重新加載/重新登錄頁面

一個特別的東西如下:

public void isUserLoggedIn() { 

    if (getSession().isSignedIn()) { 

     setResponsePage(new OverviewPage()); 

    } 
} 

如果用戶正確登錄,並希望去LoginPage,他將被自動重定向到OverviePage。

我試過這個,並在瀏覽器欄"http://anyserver/login/"中輸入了url,正如我所料,我將被重定向到OverviewPage。

但是,我的問題是:如果我登錄(LoginPage),我會被重定向到OverviewPage。如果我按下瀏覽器後退按鈕,我將被重定向到LoginPage ?!但爲什麼?直接網址可以像預期的那樣工作,但後退按鈕不可用。

我還添加了諸如:

 response.setHeader("Pragma", "no-cache"); 
    response.setHeader("Cache-Control", "no-cache, max-age=0, must-revalidate, no-store"); 

所以有一個新的請求。我用FireBug檢查過它。

但是,LoginPage的邏輯只有在有人輸入url時纔會執行。後退按鈕不符合邏輯。

任何想法?

回答

0

您的重定向邏輯可能是頁面構造函數的一部分(或onInitialize())。如果您返回頁面,則會調用該頁面的構造。順便說一句,你可能在瀏覽器中有一個頁面實例的URL(你可以通過檢查url末尾的'?n'來看到)。 您可以嘗試將此邏輯放在頁面的onConfigure()中。我沒有測試這個,所以我不確定它會起作用。

0

因爲登錄頁面是實際的上一頁。 setResponsePage設置新頁面的內容,就好像用戶點擊了鏈接一樣。

Wicket緩存頁面的內容。如果您使用後退按鈕,則瀏覽器會要求提供該頁面的確切前一版本(實際上由URL附加的?指定),以便Wicket實現該功能。

如果你想發送的實際重定向所以這不會發生使用

throw new RestartResponseException(OverviewPage.class); 

或它的一個變體讓你創建的頁面。你也應該在已經登錄的情況下發送。

相關問題