我有DataTable
。我在其底部添加了NavigationToolBar
。
当我点击页码(例如3)然后单击表格单元格中的链接时,它会转到另一页面。然后我单击顶部的链接,返回数据表的第一页。但是我想回到单击单元格中链接时的页面(第3页)。
如何编写一段像浏览器后退按钮一样的代码? (像javascript,history.go(-1)
)
答案 0 :(得分:2)
假设您使用带有setResponsePage()
的DataTable返回页面,您将返回页面的新实例,在单击单元格链接之前没有关于其状态的信息。
在我看来,你有两种方法来处理这种情况:
您可以传递详细信息页面的构造函数所有相关信息,以便在setResponsePage
中使用DataTable在页面中“重建状态”(在这种情况下,页面索引可能就足够了)。我之前使用过这种方法搜索结果页面,将所有搜索条件传递到详细信息页面并再次传回搜索页面以执行相同的搜索。
您也可以通过将带有表格的页面的引用传递给您使用该链接转到的页面,然后使用PageLink
链接回相同的Page
来解决此问题。按照Wicket用户列表中的this thread中的建议,或在setResponsePage()
中使用它。
我会选择第一个选项,因为将页面引用传递给另一个页面可能很危险,并且最终可以在详细信息页面中序列化整个DataTable页面,并且不推荐使用PageLink。有关详细信息,请参阅Wicket用户列表中的this discussion。
稍微详细一点,您可以使用Link.onClick()
中的DataTable.getCurrentPage()
将当前页码传递给DetailPage,将其存储在int
成员中,然后将其传递给DataTable页面在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);
}
}
答案 1 :(得分:1)
您可以将页面引用传递到下一个班级PageReference。