在wicket 1.5.8中强制页面到期

时间:2012-10-09 13:58:38

标签: java wicket wicket-1.5

我试图使用Wicket 1.5.8使给定页面的所有先前版本到期。在wicket 1.4中,它由getPage().getPageMap().clear()完成。现在在wicket 1.5中,页面图已经消失了,我无法弄清楚如何点缀它。

我的用例是我有一个向导(http://www.wicket-library.com/wicket-examples/wizard/)来创建/编辑实体。提交向导后,用户将被重定向到实体列表。此时我不希望用户能够使用浏览器后退按钮在状态下返回向导,因此希望使用向导使页面的先前版本到期(我正在使用{{ 1}}如果页面在用户返回时过期,那么挂载页面将以空白状态重新创建,这就是我想要的。

环顾四周,我发现可以使用getPageSettings().setRecreateMountedPagesAfterExpiry(true);从会话中删除所有页面(我不知道1.4版本是删除了所有页面还是只是用于访问PageMap的页面的所有版本 - 哪个更适合多标签支持)。但是,使用它只能部分工作,因为最后一页未过期。

假设向导已安装在Session.get().clear();,最后重定向到/wizard,则流程类似于:/list/wizard?1/wizard?2/wizard?3。现在,当我使用后退按钮时,/list未过期,尽管/wizard?3/wizard?1符合预期。会话清除和发送到列表页面是在向导的/wizard?2方法中完成的,如下所示:

onFinish

那么,问题本身就是:有人知道如何获得预期的行为,即即将到期@Override public void onFinish() { Session.get().clear(); Session.get().getFeedbackMessages().add(new FeedbackMessage(..)); setResponsePage(ListPage.class); } 吗?

由于

注意:/wizard?3是一个可收藏的页面,我也尝试使用ListPage


根据Andrea的建议更新我最终做的事情

需要注意的是,我的应用程序使用自定义会话对象来扩展wicket的setResponsePage(new ListPage());;我们称之为Session

  1. AppSession中,我添加了AppSession属性(默认为false)
  2. boolean clearRequested中,我添加了一个静态void方法AppSession,它只是在会话中将 clearRequested 设置为true的快捷方式
  3. 在我的向导的requestClear()
  4. ,在致电onFinish()之前,我致电setResponsePage
  5. 最后我只是在我的应用程序中添加AppSession.requestClear()

    RequestCycleListener
  6. 现在,只要我需要在操作后清除会话以使页面过期,我就会调用getRequestCycleListeners.add(new AbstractRequestCycleListener() { @Override public void onBeginRequest(RequestCycle cycle) { super.onBeginRequest(cycle); AppSession session = AppSesssion.get(); if (session.isClearRequested()) { session.clear(); session.setClearRequested(false); } } }); 并在下一个请求中清除会话。

1 个答案:

答案 0 :(得分:1)

您可以在ListPage中清除您的会话。由于此页面是可收藏的,因此您可以传递一个页面参数,指示ListPage必须删除会话中的页面。