在Wicket会话超时后 - pageParameters为null

时间:2013-08-30 14:29:42

标签: session wicket jsessionid wicket-1.6

我正在使用wicket 6.

我的应用程序基于构造函数中使用pageParameters创建的WebPages。我还使用了pageParameter国家/地区,该国家/地区是使用以下内容定义的路径参数:

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

我在每个页面都有很多状态表单。 我现在正试图在会话到期时处理这种情况(为了重现这种情况,我删除或修改了jsessionid cookie)。 之后,我单击页面中的提交按钮,我希望wicket能够理解会话已过期。 但我的行为是:

  • 重新加载当前页面但页面参数为“null”
  • 使用包符号重写URL:

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

所以看起来网址映射不知何故丢失了。

我需要使用pageParameters信息重新加载相同的页面,或者显示一个信息页面,上面写着点击此处重新加载。

我已经尝试过使用:

getApplicationSettings().setPageExpiredErrorPage(HomePage.class); 

但这没有帮助。

感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:1)

看起来Wicket 6中存在导致此问题的错误:https://issues.apache.org/jira/browse/WICKET-5068

它已在Wicket 7中修复。对于Wicket 6,有一种解决方法:禁用WICKET-4594修复。

首先添加以下映射器:

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

然后使用它替换BookmarkableMapper中的内置Application#init()(必须在使用根映射器进行任何操作之前添加):

mount(new BookmarkableMapperThatSavesPageParametersForListener());

这种方法适用于我们的应用程序,它似乎没有破坏任何东西。

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

答案 1 :(得分:0)

您可以在wicket邮件列表中提出您的问题。您所观察到的可能是一个错误。请检查PageParameters missing from re-created Page

从概念上讲,即使您需要经过身份验证的用户会话,也应该可以正常提交表单。 如果会话已过期,那么您可以使用remember-me cookie重新创建用户会话。 Wicket应该使用参数重新构建页面,应用表单值并处理提交。如果页面是有状态的,则可能存在一些可能解决的并发症。如果您发现有状态页面不支持您的用例,那么您可以提交问题并同时使用StatelessForm。