2015-04-17 13 views
6

Sono uno sviluppatore webapp Java EE (spring, hibernate, jsf, primefaces) e ho riscontrato il problema con il componente Primefaces DataTable. Il problema riguarda l'ordinamento delle colonne, in particolare l'ordinamento delle parole con caratteri speciali.Primefaces DataTable non ordinamento corretto

Nella mia lingua (ceco) utilizziamo caratteri come (č, ř, ž ecc.) E le parole che iniziano con questi caratteri sono ordinate alla fine della tabella. E questo è il problema. Dovrebbero essere ordinati dopo la lettera appropriata, ad es. "č" dovrebbe essere dopo "c", "ř" dovrebbe essere dopo "r" ecc. e non dopo tutti i record senza caratteri speciali.

Sto già utilizzando il filtro CharacterEncoding fornito da Spring Framework che dovrebbe forzare il set di caratteri (UTF-8) a ogni richiesta e risposta. Ma non risolve il problema. Ecco la configurazione del filtro:

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

C'è un modo per correggere questo comportamento?

risposta

5

Spero di farlo programmaticamente come se funzionasse anche per te. entities è qui solo un List<String>: metodo Bean

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

La Collator può naturalmente essere fatta una proprietà sul fagiolo per forse un po 'le prestazioni.

Se è solo l'ordinamento predefinito che stai dopo basta spostare il precedente sortBy e sortFunction per il p:datatable -tag.

+1

Grazie! Funziona bene. – Littlebox

Problemi correlati