我正在使用wicket 6.
我的应用程序基于构造函数中使用pageParameters创建的WebPages。我还使用了pageParameter国家/地区,该国家/地区是使用以下内容定义的路径参数:
mountPage("/${country}/pagepath", MyPage.class);
我在每个页面都有很多状态表单。 我现在正试图在会话到期时处理这种情况(为了重现这种情况,我删除或修改了jsessionid cookie)。 之后,我单击页面中的提交按钮,我希望wicket能够理解会话已过期。 但我的行为是:
使用包符号重写URL:
localhost:8080/wicket/bookmarkable/com.test.pages.MyPage
所以看起来网址映射不知何故丢失了。
我需要使用pageParameters信息重新加载相同的页面,或者显示一个信息页面,上面写着点击此处重新加载。
我已经尝试过使用:
getApplicationSettings().setPageExpiredErrorPage(HomePage.class);
但这没有帮助。
感谢任何帮助。感谢。
答案 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。