2015-04-17 44 views
6

Jestem programistą webap Java EE (wiosna, hibernacja, jsf, prymitywów) i znalazłem problem z komponentem PrimFaces DataTable. Problem dotyczy sortowania kolumn, w szczególności sortowania słów ze znakami specjalnymi.Primefaces DataTable nieprawidłowo sortuje

W moim języku (czeskim) używamy znaków takich jak (č, ř, ž itp.), A słowa rozpoczynające się od tych znaków są posortowane na końcu tabeli. I to jest problem. Powinny być sortowane po odpowiedniej literze, np. "č" powinno być po "c", "ř" powinno być po "r" itp., a nie po wszystkich rekordach bez znaków specjalnych.

Używam już filtru CharacterEncoding dostarczonego przez Spring Framework, który powinien wymusić zestaw znaków (UTF-8) na każdym żądaniu i odpowiedzi. Ale to nie rozwiązuje problemu. Oto konfiguracja filtra:

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

Czy istnieje sposób na poprawienie tego zachowania?

Odpowiedz

5

Mam nadzieję, że zrobienie tego programowo tak samo będzie działać również dla Ciebie. entities jest tutaj tylko List<String>:

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

Bean metoda:

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 może oczywiście być wykonane nieruchomości na fasoli dla może występu bitowym.

Jeśli jest to tylko domyślne sortowanie, po prostu przenieś powyższe sortBy i sortFunction do p:datatable -tag.

+1

Dziękujemy! Działa dobrze. – Littlebox

Powiązane problemy