PrimeFaces数据表的初始排序无法工作

4

我有一个使用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>

但是当我删除sortBy标签时,它可以正常工作,但我得到一个UnsupportedOperationException: The result list is read-only.

所以我的问题是: 我如何实现初始排序?

1个回答

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}"

编辑2:如果排序参数是字符串或数字,则无需自定义任何内容。如果您要对其他任何内容进行排序,则必须定义自定义sortFunction,

如果您使用高级选项(例如延迟加载(在pf 3.2中已经损坏 - 您现在可以更新到3.3 - 它已于5月29日发布并声称已解决此问题),则必须定义自定义模型,自己处理过滤和排序。

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


好的,谢谢。那么我需要一个特殊的bean来表示我的object[],对吗?顺便说一下,list<object[]>是从jpa查询中得到的结果。 - veote
@kostja PF希望我有一个SortMeta值列表。你能帮我解决这个问题吗? - Z3RP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接