使用p:列和转换器对primefaces dataTable进行排序

时间:2015-11-03 10:37:34

标签: jsf-2 primefaces jsf-2.2

我有一个带动态列的primefaces数据表:

<p:dataTable value="#{curSearch.getSearchResults()}"  var="curSearchResult" sortMode="multiple" rowKey="#{curSearchResult.getUniqueId()}">
    <p:columns value="#{curSearch.determinePrimaryPropertyNames()}" var="curPrimaryPropName" sortBy="#{curSearchResult[curPrimaryPropName].getValue()}">
        ...
    </p:columns>
</p:dataTable>

在大多数情况下,sortBy表达式的值适合(例如,对于日期或字符串),但我有一个必须翻译的特殊数据类型。这意味着sortBy="#{curSearchResult[curPrimaryPropName].getValue()}"传递一个必须在i18n字符串中转换的字符串。这个i18n字符串应该排序。遗憾的是,如果表达式不包含括号sortBy,则属性IndexOutOfBoundsExcpetion会抛出[]。我的想法是调用一个方法,区分“正常”值和必须翻译的值。所以我的第二个想法是为必须转换的值定义一个转换器。但是,由Primefaces评估转换后的价值吗?我猜不会。对此可能有另一种方法吗?

1 个答案:

答案 0 :(得分:0)

我在延迟加载数据表中使用了类似下面的代码段,但它运行正常。

<p:columns value="#{listController.ColumnModel}" 
      width="#{column.width}" var="column" field="#{column.field.fieldName}"   sortBy="#{ticket[column.field.fieldName]}"  
    columnIndexVar="colIndex"> 

如您所见,我将字段名称存储在列模型中。在用于加载表数据的backing bean方法中,您将收到sortmeta列表,以便对结果集进行排序。我希望这可以帮到你。