2

我正在使用检票口 6。

我的应用程序基于在构造函数中使用 pageParameters 创建的 WebPages。我还使用了一个 pageParameter country,它是一个路径参数,定义为:

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

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

  • 当前页面已重新加载,但页面参数为“空”
  • 使用包符号重写 url,例如:

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

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

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

我已经尝试过使用:

getApplicationSettings().setPageExpiredErrorPage(HomePage.class); 

但这没有帮助。

任何帮助表示赞赏。谢谢。

4

2 回答 2

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:过期后重新创建页面时为空的 PageParameters

于 2017-03-13T05:59:41.743 回答
0

您可以在 wicket 邮件列表中提出您的问题。您所观察到的可能是一个错误。请检查重新创建的页面中缺少的 PageParameters

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

于 2014-09-13T08:25:54.967 回答