Lit*_*box 6 java sorting character-encoding primefaces
我是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>
Run Code Online (Sandbox Code Playgroud)
有没有办法纠正这种行为?
我希望以编程方式这样做也会对你有用.entities在这里只是一个List<String>:
<p:dataTable value="#{testBean.entities}" var="ent">
<p:column headerText="..." sortBy="#{ent}" sortFunction="#{testBean.sort}">
#{ent}
</p:column>
</p:dataTable>
Run Code Online (Sandbox Code Playgroud)
豆法:
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);
}
Run Code Online (Sandbox Code Playgroud)
该Collator课程可制成对bean的属性可能一位性能.
如果这仅仅是默认的排序你后仅移动上方sortBy,并sortFunction到p:datatable-标签.