2012-06-01 67 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