java - 在 wicket 1.5.8 中强制页面过期

标签 java wicket wicket-1.5

我正在尝试使用 Wicket 1.5.8 使给定页面的所有先前版本过期。在 wicket 1.4 中,它是由 getPage().getPageMap().clear() 完成的。现在在 wicket 1.5 中,页面 map 不见了,我不知道如何点它。

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

环顾四周,我发现可以使用 Session.get().clear(); 从 Session 中删除所有页面(我不知道 1.4 版本是否删除了所有页面或只是用于访问 PageMap 的页面的所有版本——这对于多选项卡支持会更好)。但是,使用它只能部分起作用,因为最后一页没有过期。

假设向导挂载在/wizard,最后重定向到/list,流程将类似于:/wizard?1, /wizard?2, /wizard?3, /list.现在,当我使用后退按钮时,/wizard?3 没有过期,尽管 /wizard?1/wizard?2 符合预期. session 清除和发送到列表页面是在向导的onFinish 方法中完成的,如下所示:

@Override
public void onFinish() {
  Session.get().clear();
  Session.get().getFeedbackMessages().add(new FeedbackMessage(..));
  setResponsePage(ListPage.class);
}

那么,回到问题本身:有人知道如何获得预期的行为,即过期 /wizard?3 吗?

谢谢

注意:ListPage 是一个可添加书签的页面,我也尝试使用 setResponsePage(new ListPage());


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

需要注意的是,我的应用程序使用了一个扩展 wicket 的 Session 的自定义 session 对象;我们称它为 AppSession

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

    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);
        }
      }
    });
    

现在每当我需要在操作后清除 session 以使页面过期时,我只需调用 AppSession.requestClear() 并在下一个请求中清除 session 。

最佳答案

您可以清除 ListPage 中的 session 。由于此页面是可 Collection 的,您可以向它传递一个页面参数,指示 ListPage 必须摆脱 session 中的页面。

关于java - 在 wicket 1.5.8 中强制页面过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12801761/

相关文章:

java - 添加对 WicketStuff Spinner 属性的函数调用

java - 按 XML 文档拆分 XML 流

java - Ford Fulkerson 算法 Java

java - 如何通过 wicket ajax 行为捕获来自 <input type ="date"> 的事件?

data-original-title 中的 Wicket 本地化值

java - Wicket 路径样式参数

wicket - AjaxLink 在 Wicket 1.5 中停止工作

java - 不同语言的 Assets

java - 尝试将 Saxon 与 Web 服务一起使用时 TransformerFactoryConfigurationError

当在 Wicket ModalWindow 中使用面板时,HTML 中的 Javascript 不起作用