我有一个数据表
。我在其底部添加了 NavigationToolBar
。
当我单击页码(例如 3),然后单击表格单元格中的链接时,它会转到另一页。然后我单击顶部的链接,该链接返回到数据表的第一页。但我想返回到单击单元格中的链接时所在的同一页面(第 3 页)。
如何编写一段类似于浏览器后退按钮的代码? (类似于 javascript、history.go(-1)
)
最佳答案
假设您使用 setResponsePage()
返回带有数据表的页面,您将返回到页面的新实例,在单击单元格链接之前没有有关其状态的信息。
据我所知,您有两种方法来处理这种情况:
您可以将所有相关信息传递给详细信息页面的构造函数,以便使用
setResponsePage
中的 DataTable 在页面中“重建状态”(在这种情况下,页面索引可能是足够的)。我之前在搜索结果页面中使用过这种方法,将所有搜索条件传递到详细信息页面,然后再次将其传递回搜索页面以执行相同的搜索。您还可以通过将对包含表格的页面的引用传递给通过链接转到的页面,并使用
PageLink
链接回相同的来解决此问题>页面
,如 this thread 中建议的那样在 Wicket 用户列表中,或在setResponsePage()
中使用它。
我会选择第一个选项,因为将 Page 引用传递到另一个页面可能很危险,并且最终可能会在详细信息页面中序列化整个 DataTable 页面,并且 PageLink 已被弃用。请参阅this discussion在 Wicket 用户列表中了解详细信息。
要详细说明一下,您可以使用 DataTable.getCurrentPage()
在 Link.onClick()
中将当前页码传递给 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);
}
}
关于java - Wicket 口,返回上一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7686933/