【问题标题】:Sorting of primefaces dataTable with p:columns and converter使用 p:columns 和转换器对 primefaces 数据表进行排序
【发布时间】:2016-02-03 11:29:00
【问题描述】:

我有一个包含动态列的 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 评估的吗?我猜不会。是否有其他方法可以解决这个问题?

【问题讨论】:

    标签: jsf-2 primefaces jsf-2.2


    【解决方案1】:

    我在延迟加载数据表中使用类似于以下代码 sn-p 的东西,它工作正常。

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

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

    【讨论】:

    • 这不符合我的问题。 #{ticket[column.field.fieldName]} 的图像不是您要排序的值,而是将此值传递给传递翻译后的 (i18n) 值的方法。这怎么可能做到?
    • curSearchResult 顺便实现了Map 接口。
    猜你喜欢
    • 2016-11-13
    • 2012-11-22
    • 1970-01-01
    • 2017-11-25
    • 2012-04-19
    • 2014-11-08
    • 1970-01-01
    • 2013-08-19
    • 2017-01-16
    相关资源
    最近更新 更多