2015-04-17 5 views
6

Я разработчик Java EE webapp (spring, hibernate, jsf, primefaces), и я нашел проблему с компонентом-компонентами DataTable. Проблема связана с сортировкой столбцов, в частности сортировкой слов со специальными символами.Первичные данные DataTable не сортируются правильно

На моем языке (чешский) мы используем такие символы, как (č, ř, ž и т. Д.), А слова, начинающиеся с этих символов, сортируются в конце таблицы. И в этом проблема. Их следует сортировать после соответствующей буквы, например. «č» должно быть после «c», «ř» должно быть после «r» и т. д., а не после всех записей без специальных символов.

Я уже использую фильтр CharacterEncoding, предоставленный Spring Framework, который должен принудительно кодировать кодировку (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> 

Есть способы устранить эту проблему?

ответ

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, конечно, может быть свойство на боб для, может быть, производительность немного.

Если это только сортировка по умолчанию после переезда выше sortBy и sortFunction в p:datatable -tag.

+1

Спасибо! Он работает нормально. – Littlebox

Смежные вопросы