【问题标题】:Wicket, back to the previous page检票口,返回上一页
【发布时间】:2016-06-17 12:39:32
【问题描述】:

我有一个DataTable。我在它的底部添加了NavigationToolBar

当我单击页码(例如 3)然后单击表格单元格中的链接时,它会转到另一个页面。然后我单击顶部的链接,该链接返回到数据表的第一页。但是我想回到单击单元格中的链接时的同一页面(第 3 页)。

如何编写一段代码,就像浏览器的后退按钮一样? (类似于 javascript,history.go(-1)

【问题讨论】:

  • 您可能想查看您的previous question 并在其中任何人解决您的问题时接受答案。

标签: java wicket


【解决方案1】:

假设您返回到带有 setResponsePage() 的 DataTable 的页面,您将返回到页面的新实例,在单击单元格链接之前没有关于其状态的信息。

在我看来,你有两种方法来处理这种情况:

  1. 您可以将所有相关信息传递给详细信息页面的构造函数,以便使用 setResponsePage 中的 DataTable 在页面中“重建状态”(在这种情况下,页面索引可能就足够了)。我之前在搜索结果页面中使用过这种方法,将所有搜索条件传递给详细信息页面,然后再次将其传递回搜索页面以执行相同的搜索。

  2. 您还可以通过将包含表格的页面的引用传递给您通过链接访问的页面,并使用PageLink 链接回Page 中所建议的相同的Page,从而解决此问题Wicket 用户列表中的 987654321@,或在 setResponsePage() 中使用。

我会选择第一个选项,因为将 Page 引用传递给另一个页面可能很危险,并且您最终可能会在详细信息页面中序列化整个 DataTable 页面,并且 PageLink 已被弃用。有关详细信息,请参阅 Wicket 用户列表中的this discussion

稍微详细一点,您可以在Link.onClick() 中使用DataTable.getCurrentPage() 将当前页码传递给DetailPage,将其存储在int 成员中,然后将其传递回DataTable Page 以使用它在DataTable.setCurrentPage()

 public DataTablePage extends Page {
      private DataTable dataTable;
      public void setDataTablePage(int page){
            dataTable.setCurrentPage(page);
      }   
      // .....
     // DataTable cell link onclick
     public void onClick(){
         int pageNumber = dataTable.getCurrentPage();
         DetailPage detailPage = new DetailPage(id, params, pageNumber);
         setResponsePage(page);
     }          
 }

 public class DetailPage extends Page {
     int pageNumber;
     public DetailPage(String id, Object params, int pageNumber){
         //...
         this.pageNumber = pageNumber;
         //...
     }
     private void backToTablePage(){
          DataTablePage dataTablePage = new DataTablePage(id, params);
          dataTablePage.setDataTablePage(pageNumber);
          setResponsePage(dataTablePage);
     }
 }

【讨论】:

  • 非常感谢!我应用了您编写的解决方案。我想知道是否可以工作,但它工作得很好!现在我觉得检票口没有我想象的那么糟糕:D
  • Wicket 是一个非常棒的框架。与其他所有框架一样,它是一个好(优秀)或坏的选择,具体取决于您要构建的应用程序的类型。当我必须收回 Struts 时,我个人觉得要退后一步。适应范式的转变需要一点时间,但绝对值得。
【解决方案2】:

您可以将页面引用传递给下一个类PageReference

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    • 2013-03-30
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多