【问题标题】:Primefaces DataTable not sorting properlyPrimefaces DataTable 没有正确排序
【发布时间】:2015-04-17 21:35:56
【问题描述】:

我是 Java EE webapp 开发人员(spring、hibernate、jsf、primefaces),我发现 primefaces 组件 DataTable 存在问题。问题涉及列排序,特别是对带有特殊字符的单词进行排序。

在我的语言(捷克语)中,我们使用诸如(č、ř、ž 等)之类的字符,并且以这些字符开头的单词在表格末尾排序。这就是问题所在。它们应该在适当的字母之后排序,例如“č”应该在“c”之后,“ř”应该在“r”之后等等,而不是在所有没有特殊字符的记录之后。

我已经在使用 Spring Framework 提供的 CharacterEncoding 过滤器,它应该强制对每个请求和响应使用字符集 (UTF-8)。但这并不能解决问题。下面是过滤器的配置:

<filter>
    <filter-name>charEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

有没有办法纠正这种行为?

【问题讨论】:

    标签: java sorting primefaces character-encoding


    【解决方案1】:

    我希望像这样以编程方式进行操作也对您有用。 entities 在这里只是一个List&lt;String&gt;

    <p:dataTable value="#{testBean.entities}" var="ent">
        <p:column headerText="..." sortBy="#{ent}" sortFunction="#{testBean.sort}">
            #{ent}
        </p:column>
    </p:dataTable>
    

    豆方法:

    public int sort(Object ent1, Object ent2) {
        String s1 = (String) ent1;
        String s2 = (String) ent2;
    
        Collator collator = Collator.getInstance(new Locale("cs"));  //Your locale here
        collator.setStrength(Collator.IDENTICAL);
        return collator.compare(s1, s2);
    }
    

    Collator 当然可以作为 bean 上的一个属性,以提高性能。

    如果只是默认排序,只需将上面的 sortBysortFunction 移动到 p:datatable-tag 即可。

    【讨论】:

      猜你喜欢
      • 2019-06-30
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-01
      相关资源
      最近更新 更多