繁体   English   中英

Primefaces DataTable无法正确排序

[英]Primefaces DataTable not sorting properly

我是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>

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

我希望以编程方式这样做也会对你有用。 entities在这里只是一个List<String>

<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即可。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM