PrimeFaces数据表初始sortBy不起作用

时间:2012-06-01 10:45:51

标签: java jsf primefaces

我有一个使用apache myfaces 2.0.2的PrimeFaces 3.2 DataTable。我想要一个初步的排序。我的JSF看起来像:

<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标签时,它工作正常。

所以我的问题: 我怎样才能实现初步排序?

1 个答案:

答案 0 :(得分:4)

对原始List执行排序。如果它是只读的,则抛出异常。尝试相同,但使用常规的,可变的List

编辑:在bean中创建一个常规列表:

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:如果排序参数是字符串或数字,则无需自定义任何内容。如果要对其他任何内容进行排序,则必须定义自定义sortFunction,

如果您使用延迟加载等高级选项(在3.2版中已经破坏了 - 您现在可以更新到3.3 - 它已经在29.5上发布并声称已经解决了这个问题),您将不得不定义一个自定义模型,照顾过滤和排序自己。

因此,如果您想按数组内容对数据进行排序,则需要定义属性sortFunction="#{myBean.sortData()}"