Server-side DataTable Sorting in RichFaces

19,766

Solution 1

I ended up doing it manually. I adding a support tag to the header text tag, like so.

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

To get the ascending/descending arrows, I added a css class.

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

Solution 2

Your datamodel needs to implement "Modifiable" interface.

The datatable will call it's modify() method to do serverside sorting and filtering.

Solution 3

There is a fairly elegant solution to this solution here:

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

This demo avoids using the tag.

Share:
19,766
jbwharris
Author by

jbwharris

I'm a developer in the Boston area. I work primarily in Java, but have interests in Scala.

Updated on June 27, 2022

Comments

  • jbwharris
    jbwharris almost 2 years

    I have a data table with a variable number of columns and a data scroller. How can I enable server side sorting? I prefer that it be fired by the user clicking the column header.

    <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>
    

    I already have a method on the bean for executing the sort.

    public void sort(int column)
    
  • Admin
    Admin over 14 years
    I cannot get this attribute to work consistently. Anyway he said server side sorting. Isn't rich:columns with sortBy client side sorting?
  • Jason Wheeler
    Jason Wheeler over 12 years
    This shows how to do external sorting, but the sorting is still happening on the client side. I believe that OP is interested in catching the click event from clicking the headers and then having the underlying datasource sorted on the backend.