Server-side DataTable Sorting in RichFaces
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.
jbwharris
I'm a developer in the Boston area. I work primarily in Java, but have interests in Scala.
Updated on June 27, 2022Comments
-
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 over 14 yearsI cannot get this attribute to work consistently. Anyway he said server side sorting. Isn't rich:columns with sortBy client side sorting?
-
Jason Wheeler over 12 yearsThis 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.