Primefaces的DataTable无法正确排序

6
我是一名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>

有没有一种方法可以纠正这种行为?
1个回答

5
我希望像这样以编程方式进行操作对您也有效。 "entities" 只是一个 List<String>
<p:dataTable value="#{testBean.entities}" var="ent">
    <p:column headerText="..." sortBy="#{ent}" sortFunction="#{testBean.sort}">
        #{ent}
    </p:column>
</p:dataTable>

Bean方法:

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标签中即可。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接