2012-06-01 63 views
4

我有一個使用apache myfaces 2.0.2的PrimeFaces 3.2數據表。我想要一個初始的排序。我的JSF的樣子:PrimeFaces數據表初始sortBy不起作用

<p:dataTable id="serverdata" var="serverdata" sortBy="#{serverdata[0]}" sortOrder="descending" 
       value="#{ serverDataTable.list }" rows="10" editable="true" 
       paginator="true" rowsPerPageTemplate="10,20,50" 
       paginatorTemplate="{CurrentPageReport} {FirstPageLink} {PreviousPageLink} {PageLinks} {NextPageLink} {LastPageLink} {RowsPerPageDropdown}"> 
       <f:facet name="header"> 
        Datatable 
       </f:facet> 
       <p:column> 
        <f:facet name="header"> 
         <h:outputText value="Datum"/> 
        </f:facet> 
        <h:outputText value="#{serverdata[0]}"> 
        </h:outputText> 
       </p:column> 

但我得到一個UnsupportedOperationException: The result list is read-only.當我刪除sortBy標籤在它工作正常。我的問題: 如何才能實現初始排序?

回答

4

排序在原始List上執行。如果它是隻讀的,則拋出異常。嘗試相同,但有規律的,可變的List

編輯:

public class MyBean { 
... 
List<MyObject> myList = new ArryList<MyObject>(); 
myList.add(new MyObject("a")); 
myList.add(new MyObject("b")); 
myList.add(new MyObject("c")); 
... 

然後使用排序是這樣的::value="#{myBean.myList}" var="myVar" sortBy="#{myVar.stringProp}"

EDIT2:如果排序參數是在bean創建一個普通的列表字符串或數字,你不需要定製任何東西。如果你正在整理其他任何東西,你將不得不定義一個自定義的sortFunction,如果你使用高級選項,比如懶惰加載(這是3.2中的btw中斷 - 你現在可以更新到3.3 - 它已經在29.5並聲稱已經解決了這個問題),你將不得不定義一個自定義模型,負責過濾和排序你自己。

所以,如果你想通過數組的內容數據進行排序,你需要定義屬性sortFunction="#{myBean.sortData()}"

+0

沒問題,我已經編輯了答案 – kostja

+0

好的,謝謝你,所以我需要一個特殊的bean代表我的對象[],對吧? b.t.w.清單是來自jpa查詢的結果 – veote

+0

@veote我希望新的編輯會有幫助 – kostja