2013-08-30 64 views
2

我使用的檢票口6檢票會話超時後 - pageParameters是空的

我的應用程序是基於在構造pageParameters創建網頁。我使用的也是pageParameter國家是有定義的路徑參數:

mountPage("/${country}/pagepath", MyPage.class); 

我在每一個頁面中有許多有狀態的形式。 我現在正試圖處理會話過期時的情況(重現此場景我刪除或修改jsessionid cookie)。 之後,我點擊頁面中的提交按鈕,我希望檢票瞭解會話已過期。 但是,我有行爲是這樣的:

  • 當前頁面重新加載,但
  • URL是使用包裝符號像改寫了pageparameters是「空」:

    localhost:8080/wicket/bookmarkable/com.test.pages.MyPage 
    

所以它看起來像URL映射不知何故丟失。

我需要重新加載與pageParameters信息相同的頁面或顯示一個信息頁面,說點什麼像點擊這裏重新加載。

我已經嘗試過使用:

getApplicationSettings().setPageExpiredErrorPage(HomePage.class); 

,但沒有幫助。

任何幫助表示讚賞。謝謝。

回答

0

你可以在wicket郵件列表中提問你的問題。你正在觀察的可能是一個錯誤。請檢查PageParameters missing from re-created Page

從概念上講,即使您需要經過身份驗證的用戶會話,也應該可以正常提交表單。 如果會話過期,那麼您可以使用remember-me cookie重新創建用戶會話。 Wicket應該用參數重新構建頁面,應用表單值並處理提交。如果頁面是有狀態的,可能會有一些可能解決的複雜問題。如果您發現您的用例不支持有狀態頁面,那麼您可以提出問題並同時使用StatelessForm。

1

看起來有在檢票6中的錯誤導致此問題:https://issues.apache.org/jira/browse/WICKET-5068

它是固定在檢票7檢票6,有一個解決辦法:禁用便門-4594定位。

首先添加下面的映射:

public class BookmarkableMapperThatSavesPageParametersForListener extends BookmarkableMapper { 
    @Override 
    protected PageParameters getPageParametersForListener(PageInfo pageInfo, PageParameters pageParameters) { 
     return pageParameters; 
    } 
} 

然後用它來替換內置BookmarkableMapperApplication#init()(這與根映射任何操作之前,必須加):

mount(new BookmarkableMapperThatSavesPageParametersForListener()); 

這種方法適用於我們的應用程序,它似乎不會破壞任何東西。

更多信息:Wicket 6: empty PageParameters when recreating a page after expiration