Tri de DataTable côté serveur dans RichFaces
Question
J'ai une table de données avec un nombre variable de colonnes et un scroller de données. Comment puis-je activer le tri côté serveur? Je préfère qu'il soit déclenché lorsque l'utilisateur clique sur l'en-tête de la colonne.
<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>
J'ai déjà une méthode sur le haricot pour exécuter le tri.
public void sort(int column)
La solution
J'ai fini par le faire manuellement. J'ajoute une balise de support à la balise de texte en-tête, comme ça.
<h:outputText value="#{column}">
<a4j:support event="onclick" action="#{pageDataModel.sort(idx)}"
eventsQueue="instancesQueue"
reRender="instanceList,instanceListScroller"/>
</h:outputText>
Pour obtenir les flèches ascendantes / descendantes, j'ai ajouté une classe css.
<h:outputText value="#{column}" styleClass="#{pageDataModel.getOrderClass(idx)}" >
<a4j:support event="onclick" action="#{pageDataModel.sort(idx)}"
eventsQueue="instancesQueue"
reRender="instanceList,instanceListScroller"/>
</h:outputText>
Autres conseils
Il existe une solution assez élégante à cette solution ici:
http://livedemo.exadel.com /richfaces-demo/richfaces/sortingFeature.jsf?tab=ex-usage
Cette démo évite d’utiliser la balise.
Votre modèle de données doit implémenter "Modifiable". interface.
Le datatable appellera sa méthode modify ()
pour effectuer des opérations serveur
le tri et le filtrage.
Consultez le " triBy " propriété de "riche: colonnes", c’est peut-être ce que vous recherchez. Référence de Richfaces
Ne pouvez-vous pas simplement utiliser Collection.sort () lorsque vous récupérez la liste?