2012-03-16 24 views
2

爲了顯示搜索結果,我們使用Primefaces數據表組件來排序,分頁和LazyDataModel。搜索頁面的後臺bean是ViewScoped帶有分頁和排序以及瀏覽器返回的JSF數據表

從搜索結果列表中,用戶可以選擇結果項目以查看詳細信息。這是作爲新的頁面請求實現的,例如, <h:link value="Show Details" outcome="showDetails?id=11234"/>。通過點擊瀏覽器後退按鈕,用戶將回到搜索結果列表。

問題是數據表會再次處於初始狀態,所以它不會顯示最後選擇的排序順序和頁面。在大多數瀏覽器中都是如此,只有Firefox 11似乎將這些DOM更改保留在緩存中。無論是IE還是Chrome。

有沒有人有一個很好的方法來處理這個問題?我們實際上不需要「ajaxified」排序和分頁。我們寧願通過ViewParams來處理所有事情,但這似乎不被primefaces支持。

回答

1

我也遇到了這個問題,並且我開發了一種可能有用的編碼模式。它並不是一個真正的PrimeFaces(我正在使用它) - 更多使用JSF 2使用書籤鏈接的技術。

在標記中,我包含頁面的所有參數,如下所示:

 <f:metadata> 
      <f:viewParam name="orderID" value="#{bean.orderID}" /> 
      <f:viewParam name="sortMode" value="#{bean.sortMode}" /> 
      <f:viewParam name="firstRecord" value="#{bean.firstRecord}" /> 
      <f:viewParam name="pageSize" value="#{bean.pageSize}" /> 
     </f:metadata> 

這些值中的每一個都在backing bean中支持,因此如果它們未設置,它們將生成一個合適的默認值。例如:

現在你實現用戶控制,以改變這些值,並且它們每一個被改變的時間重新生成的表:

public int getPageSize() { 
    if (pageSize < MIN_PAGE_SIZE) pageSize = DEF_PAGE_SIZE; 
    if (pageSize > MAX_PAGE_SIZE) pageSize = DEF_PAGE_SIZE; 
    return pageSize; 
} 

甲連結此視圖可如下生成。你應該仍然使用AJAX爲 - 例如:

<p:spinner value=#{bean.pageSize} > 
    <p:ajax update="tableID" /> 
</p:spinner> 

在setter方法,你必須觸發重新生成的表,但是這是它的要點。我希望這有幫助。

UPDATE:

爲了處理分頁,你只需要添加的第一頁,前一頁,下頁,等等鏈接的鏈接將是這個樣子:

<h:link value="First Page" outcome="thisPage"> 
     <f:param name="orderID" value="#{bean.orderID}" /> 
     <f:param name="sortMode" value="#{bean.sortMode}" /> 
     <f:param name="firstRecord" value="0" /> 
     <f:param name="pageSize" value="#{bean.pageSize}" /> 
</h:link> 
<h:link value="Next Page" outcome="thisPage"> 
     <f:param name="orderID" value="#{bean.orderID}" /> 
     <f:param name="sortMode" value="#{bean.sortMode}" /> 
     <f:param name="firstRecord" value="#{bean.nextRecord}" /> 
     <f:param name="pageSize" value="#{bean.pageSize}" /> 
</h:link> 

等你需要在後臺bean中實現屬性來計算參數應該是什麼。

+0

thx,是有頁和排序參數視圖params是我比ajax更喜歡。但我的問題是更多關於如何處理分頁和使用這種方法使用primefaces中的數據加載數據進行排序。 – fischermatte 2012-03-18 20:48:50

+0

@fischermatte查看更新。 – AlanObject 2012-03-18 23:24:42

+0

仍然 - 你如何告知primefaces數據表中的paginator和排序按鈕,他們不應該執行ajax請求,而是用這些參數調用新的頁面請求?我看到的唯一解決方案就是用這樣的排序和分頁編寫自己的數據表組件。但如果我是第一個遇到這個問題的人,我真的很好奇。從我的角度來看,這是應該由組件框架處理的功能。 – fischermatte 2012-03-19 08:24:43