2008-09-25 6 views
8

Ich habe eine Datentabelle mit einer variablen Anzahl von Spalten und einem Datenscroller. Wie kann ich die serverseitige Sortierung aktivieren? Ich bevorzuge es, dass es durch den Benutzer ausgelöst wird, der auf die Spaltenüberschrift klickt.Serverseitige DataTable Sortierung in 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> 

Ich habe bereits eine Methode auf der Bean zum Ausführen der Sortierung.

public void sort(int column) 

Antwort

6

Ich landete es manuell. Ich fügte dem Header-Text-Tag ein Support-Tag hinzu.

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

Um die aufsteigenden/absteigenden Pfeile zu erhalten, habe ich eine CSS-Klasse hinzugefügt.

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

Werfen Sie einen Blick auf die „sortBy“ Eigenschaft „Rich: Spalten“, vielleicht ist es das, was Sie suchen. Richfaces Reference

+2

Ich kann dieses Attribut nicht konsistent arbeiten. Jedenfalls sagte er serverseitig sortiert. Ist nicht reich: Spalten mit sortBy client side sorting? –

0

Können Sie nicht einfach Collection.sort() verwenden, wenn Sie die Liste abrufen?

1

Ihr Datamodell muss eine "änderbare" Schnittstelle implementieren.

Die Datentabelle ruft die modify() Methode auf, um die serverseitige Sortierung und Filterung durchzuführen.

1

Es gibt eine recht elegante Lösung für diese Lösung hier:

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

Diese Demo vermeidet den-Tag.

+2

Dies zeigt, wie externe Sortierung durchgeführt wird, aber die Sortierung geschieht immer noch auf der Client-Seite. Ich glaube, dass OP daran interessiert ist, das Klickereignis von einem Klick auf die Header abzufangen und dann die zugrunde liegende Datenquelle im Backend zu sortieren. –