Калитка, вернуться на предыдущую страницу - PullRequest
2 голосов
/ 07 октября 2011

У меня есть DataTable.Я добавил NavigationToolBar внизу.

Когда я нажимаю на номер страницы (например, 3), а затем нажимаю на ссылку в ячейке таблицы, она переходит на другую страницу.Затем я нажимаю на ссылку сверху, которая возвращается к первой странице таблицы данных.Но я хочу вернуться на ту же страницу, на которой была, когда щелкала ссылку в ячейке (страница 3).

Как мне написать кусок кода, который работает как кнопка возврата браузера?(что-то вроде javascript, history.go(-1))

Ответы [ 2 ]

2 голосов
/ 07 октября 2011

Если вы вернетесь на страницу с таблицей данных с setResponsePage(), вы вернетесь к новому экземпляру страницы без информации о ее состоянии, прежде чем щелкнуть ссылку на ячейку.

На мой взгляд, у вас есть два способа справиться с этой ситуацией:

  1. Вы можете передать конструктору страницы сведений всю необходимую информацию, чтобы «перестроить состояние» на странице с таблицей данных в вашем setResponsePage (в этом случае может быть достаточно индекса страницы). Ранее я использовал этот подход на странице результатов поиска, передавая все критерии поиска на страницу сведений и возвращая их снова на страницу поиска, чтобы выполнить тот же поиск.

  2. Вы также можете решить эту проблему, передав ссылку на страницу с таблицей на страницу, на которую вы переходите по ссылке, и используя 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);
     }
 }
1 голос
/ 07 мая 2012

Вы можете передать ссылку на страницу в следующий класс PageReference .

...