2011-10-07 44 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帶回時,我個人覺得需要邁出一步或多步。適應範式的轉變需要一點時間,但這絕對值得。 –