Сортировка таблиц данных на стороне сервера в RichFaces

StackOverflow https://stackoverflow.com/questions/134742

  •  02-07-2019
  •  | 
  •  

Вопрос

У меня есть таблица данных с переменным количеством столбцов и скроллером данных.Как включить сортировку на стороне сервера?Я предпочитаю, чтобы он запускался пользователем, щелкающим заголовок столбца.

<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() при получении списка?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top