質問

可変数の列とデータ スクローラーを備えたデータ テーブルがあります。サーバー側の並べ替えを有効にするにはどうすればよいですか?ユーザーが列ヘッダーをクリックすることによって起動されることを好みます。

<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() を使用することはできませんか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top