我有一个带动态列的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评估转换后的价值吗?我猜不会。对此可能有另一种方法吗?
答案 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列表,以便对结果集进行排序。我希望这可以帮到你。