前回エントリ「PrimeFacesのDataTableを探る ~DynamicColumn~」の続きです。
業務システム構築の設計時に、お客さんと一覧テーブルの話をすると「こういうのできる?」といった色々な意見を頂いたりします。
カラムでのソートができるかどうか?マルチにできるか?なんかもありますよねー(^^;
今日はそんな一覧のソートに関してです。
一覧での単純カラムソート
前回PrimeFacesのDataTableを定義しましたが、ソートは非常に簡単で、columnsの属性にあるsortByを以下のように指定するのみです。*1
<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form id="dtFrm">
<p:dataTable id="dt" var="book" value="#{bookBean.bookList}" >
<p:columns id="colBook" var="col" value="#{bookBean.columns}"
sortBy="#{book[col.property]}">
<f:facet name="header">
#{col.header}
</f:facet>
<h:outputText value="#{book[col.property]}" />
</p:columns>
</p:dataTable>
</h:form>
</h:body>
</html>
DBの中身を(前回から入れ替えて)実行してみます。
初期表示時

書籍タイトルカラムで降順

著者で降順

こんな感じです(^^)ただ残念なことに初期表示状態に戻すことができず、一度ソートすると昇順降順の繰り返しとなります。(戻す方法ご存知の方がいたら是非教えてください!)
一覧でのマルチカラムソート
PrimeFacesでは3.5(だったかと)からカラムのマルチソートもできるようになりました。
1つのカラムを選んだ後、Ctrlキーを押しながら、もう1つカラムを選ぶと以下のようなソートが可能です。
書籍タイトルカラムで昇順の中で著者カラムを昇順

書籍タイトルカラムで昇順の中で著者カラムを降順

方法はdatatableの属性にあるsortModeでmultipleを指定するだけです。
<?xml version='1.0' encoding='UTF-8' ?>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:p="http://primefaces.org/ui"
xmlns:f="http://java.sun.com/jsf/core">
<h:head>
<title>Facelet Title</title>
</h:head>
<h:body>
<h:form id="dtFrm">
<p:dataTable id="dt" var="book" value="#{bookBean.bookList}" sortMode="multiple">
<p:columns id="colBook" var="col" value="#{bookBean.columns}"
sortBy="#{book[col.property]}>
<f:facet name="header">
#{col.header}
</f:facet>
<h:outputText value="#{book[col.property]}" />
</p:columns>
</p:dataTable>
</h:form>
</h:body>
</html>
設定が簡単なので、結構便利です(^^)