2015-04-17 20 views
6

Ich bin Java EE WebApp Entwickler (Frühling, Winterschlaf, JSF, Primefaces) und ich fand das Problem mit der Subfaces Komponente DataTable. Das Problem betrifft die Spaltensortierung, insbesondere das Sortieren von Wörtern mit Sonderzeichen.Primefaces DataTable nicht richtig sortieren

In meiner Sprache (Tschechisch) verwenden wir Zeichen wie (č, ř, ž usw.) und Wörter beginnend mit diesen Zeichen sind am Ende der Tabelle sortiert. Und das ist das Problem. Sie sollten nach einem geeigneten Buchstaben, z. "č" sollte nach "c" stehen, "ř" sollte nach "r" usw. stehen und nicht nach allen Datensätzen ohne Sonderzeichen.

Ich benutze bereits den von Spring Framework zur Verfügung gestellten CharacterEncoding-Filter, der den Zeichensatz (UTF-8) auf jede Anfrage und Antwort zwingen sollte. Aber es löst das Problem nicht. Hier ist die Konfiguration des Filters:

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

Gibt es eine Möglichkeit, dieses Verhalten zu korrigieren?

Antwort

5

Ich hoffe, es programmatisch so zu tun, wird auch für Sie funktionieren. entities ist hier nur eine List<String>:

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

Bean-Methode:

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); 
} 

Die Collator kann natürlich eine Immobilie an der für vielleicht ein bisschen Performance Bohne gemacht werden.

Wenn es nur die Standardsortierung ist, nach der Sie suchen, bewegen Sie einfach die obigen sortBy und sortFunction auf das p:datatable -Tag.

+1

Vielen Dank! Es funktioniert gut. – Littlebox

Verwandte Themen