Сортировка таблиц данных на стороне сервера в RichFaces
Вопрос
У меня есть таблица данных с переменным количеством столбцов и скроллером данных.Как включить сортировку на стороне сервера?Я предпочитаю, чтобы он запускался пользователем, щелкающим заголовок столбца.
<rich:datascroller for="instanceList" actionListener="#{pageDataModel.pageChange}"/>
<rich:dataTable id="instanceList" rows="10" value="#{pageDataModel}"
var="fieldValues" rowKeyVar="rowKey">
<rich:columns value="#{pageDataModel.columnNames}" var="column" index="idx">
<f:facet name="header">
<h:outputText value="#{column}"/>
</f:facet>
<h:outputText value="#{classFieldValues[idx]}" />
</rich:columns>
</rich:dataTable>
У меня уже есть метод в компоненте для выполнения сортировки.
public void sort(int column)
Решение
В итоге я сделал это вручную.Я добавляю тег поддержки в текстовый тег заголовка, вот так.
<h:outputText value="#{column}">
<a4j:support event="onclick" action="#{pageDataModel.sort(idx)}"
eventsQueue="instancesQueue"
reRender="instanceList,instanceListScroller"/>
</h:outputText>
Чтобы получить стрелки по возрастанию и убыванию, я добавил класс CSS.
<h:outputText value="#{column}" styleClass="#{pageDataModel.getOrderClass(idx)}" >
<a4j:support event="onclick" action="#{pageDataModel.sort(idx)}"
eventsQueue="instancesQueue"
reRender="instanceList,instanceListScroller"/>
</h:outputText>
Другие советы
Здесь есть довольно элегантное решение:
http://livedemo.exadel.com/richfaces-demo/richfaces/sortingFeature.jsf?tab=ex-usage
В этой демонстрации избегается использование тега.
Ваша модель данных должна реализовать «модифицируемый» интерфейс.
Таблица данных назовет это modify()
Метод для сортировки и фильтрации серверов.
Взгляните на свойство sortBy объекта rich:columns, возможно, это то, что вы ищете.Справочник по Richfaces
Не можете ли вы просто использовать Collection.sort() при получении списка?