RichFaces中的服务器端DataTable排序

sbl*_*ndy 8 java ajax jsf 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>
Run Code Online (Sandbox Code Playgroud)

我已经在bean上有一个方法来执行排序.

public void sort(int column)
Run Code Online (Sandbox Code Playgroud)

sbl*_*ndy 6

我最终手动完成了.我在标题文本标记中添加了一个支持标记,就像这样.

<h:outputText value="#{column}">
  <a4j:support event="onclick" action="#{pageDataModel.sort(idx)}"
               eventsQueue="instancesQueue"
               reRender="instanceList,instanceListScroller"/>
</h:outputText>
Run Code Online (Sandbox Code Playgroud)

为了获得上升/下降箭头,我添加了一个css类.

<h:outputText value="#{column}" styleClass="#{pageDataModel.getOrderClass(idx)}" >
  <a4j:support event="onclick" action="#{pageDataModel.sort(idx)}"
               eventsQueue="instancesQueue"
               reRender="instanceList,instanceListScroller"/>
</h:outputText>
Run Code Online (Sandbox Code Playgroud)