Сортировка DataTable на стороне сервера в 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>

У меня уже есть метод bean-компонента для выполнения сортировки.

public void sort(int column)

person sblundy    schedule 25.09.2008    source источник


Ответы (5)


В итоге я сделал это вручную. Я добавляю тег поддержки в текстовый тег заголовка, например.

<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>
person sblundy    schedule 25.09.2008

Здесь есть довольно элегантное решение для этого решения:

http://livedemo.exadel.com/richfaces-demo/richfaces/sortingFeature.jsf?tab=ex-usage

В этой демонстрации этот тег не используется.

person Marco    schedule 15.07.2010
comment
Здесь показано, как выполнять внешнюю сортировку, но сортировка по-прежнему выполняется на стороне клиента. Я считаю, что OP заинтересован в том, чтобы перехватить событие щелчка при нажатии на заголовки, а затем отсортировать базовый источник данных на серверной части. - person Jason Wheeler; 07.02.2012

Ваша модель данных должна реализовать «модифицируемый» интерфейс.

Datatable вызовет метод modify() для сортировки и фильтрации на стороне сервера.

person Philipp    schedule 14.05.2010

Взгляните на свойство sortBy для Rich:columns, возможно, это то, что вы ищете. Справочник по Richfaces

person Patrick    schedule 22.10.2008
comment
Я не могу заставить этот атрибут работать последовательно. Во всяком случае, он сказал сортировку на стороне сервера. Разве не rich:columns с сортировкой sortBy на стороне клиента? - person ; 18.08.2009

Разве вы не можете просто использовать Collection.sort() при извлечении списка?

person Shervin Asgari    schedule 14.11.2008