Если вы вернетесь на страницу с таблицей данных с setResponsePage()
, вы вернетесь к новому экземпляру страницы без информации о ее состоянии, прежде чем щелкнуть ссылку на ячейку.
На мой взгляд, у вас есть два способа справиться с этой ситуацией:
Вы можете передать конструктору страницы сведений всю необходимую информацию, чтобы «перестроить состояние» на странице с таблицей данных в вашем setResponsePage
(в этом случае может быть достаточно индекса страницы). Ранее я использовал этот подход на странице результатов поиска, передавая все критерии поиска на страницу сведений и возвращая их снова на страницу поиска, чтобы выполнить тот же поиск.
Вы также можете решить эту проблему, передав ссылку на страницу с таблицей на страницу, на которую вы переходите по ссылке, и используя PageLink
для ссылки на тот же Page
, как предложено в этот поток в списке пользователей Wicket или использование его в setResponsePage()
.
Я бы выбрал первый вариант, потому что передача ссылки на страницу на другую страницу может быть опасной, и вы можете получить всю страницу DataTable, сериализованную на странице сведений, и PageLink устарел. Подробнее см. в этом обсуждении в списке пользователей 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);
}
}