RichFaces でのサーバー側の DataTable の並べ替え
質問
可変数の列とデータ スクローラーを備えたデータ テーブルがあります。サーバー側の並べ替えを有効にするにはどうすればよいですか?ユーザーが列ヘッダーをクリックすることによって起動されることを好みます。
<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>
Bean にはソートを実行するためのメソッドがすでにあります。
public void sort(int column)
解決
結局手動でやりました。こんな感じでヘッダーテキストタグにsupportタグを追加します。
<h:outputText value="#{column}">
<a4j:support event="onclick" action="#{pageDataModel.sort(idx)}"
eventsQueue="instancesQueue"
reRender="instanceList,instanceListScroller"/>
</h:outputText>
昇順/降順の矢印を取得するために、CSS クラスを追加しました。
<h:outputText value="#{column}" styleClass="#{pageDataModel.getOrderClass(idx)}" >
<a4j:support event="onclick" action="#{pageDataModel.sort(idx)}"
eventsQueue="instancesQueue"
reRender="instanceList,instanceListScroller"/>
</h:outputText>
他のヒント
この解決策に対するかなり洗練された解決策がここにあります。
http://livedemo.exadel.com/richfaces-demo/richfaces/sortingFeature.jsf?tab=ex-usage
このデモではタグの使用を避けています。
データモデルは「変更可能」インターフェイスを実装する必要があります。
データテーブルはそれを呼び出します modify()
サーバーサイドのソートとフィルタリングを行う方法。
「rich:columns」の「sortBy」プロパティを見てください。おそらくそれがあなたが探しているものです。リッチフェイスのリファレンス
リストを取得するときに Collection.sort() を使用することはできませんか?
所属していません StackOverflow