2011-10-07 59 views
2

我有一个DataTable。我在其底部添加了。Wicket,回到前一页

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

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

+1

您可能想查看您的[上一个问题](http://stackoverflow.com/q/7594371/851811),并接受一个答案,如果他们中的任何人解决了您的问题。 –

回答

2

假设您使用setResponsePage()的DataTable返回页面,您将返回页面的新实例,而无需单击单元格链接之前的状态信息。

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

  1. 你可以在页面传递到详细页的构造函数的所有相关信息,以“重建国家”与数据表中你的setResponsePage(在这种情况下,页面索引就足够了)。我之前在搜索结果页面中使用了这种方法,将所有搜索条件传递到详细信息页面,并将其传递回搜索页面以执行相同的搜索。

  2. 你也可以通过传递一个参考页与表你去与链接的页面,并使用PageLink作为在检票用户列表this thread建议回链接到同一Page解决这个问题,或在setResponsePage()中使用它。

我会去的第一个选项,因为传递一个页面引用到另一个页面可能是危险的,你可以在详细信息页面序列化的整个数据表页结束,并PageLink已被弃用。有关详细信息,请参阅Wicket用户列表中的this discussion

要详细一点,你可以使用DataTable.getCurrentPage()Link.onClick()到当前页码传递给DetailPage,它在int成员有存储,并将其传递回数据表页面中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); 
    } 
} 
+0

非常感谢!我应用了您编码的解决方案。我想知道是否可以工作,但它完美的工作!现在我觉得检票并不像我想象的那么糟:D –

+1

检票是一个伟大的,伟大的框架。像所有其他框架一样,根据您要构建的应用程序类型,这是一个很好的(优秀的)或不好的选项。当我需要将Struts带回时,我个人觉得需要迈出一步或多步。适应范式的转变需要一点时间,但这绝对值得。 –