2012年7月8日日曜日

Displaytagポートレットで表のソート、ページング

Displaytagポートレットの作り方。
及び、このポートレットでソート、ページングができる表の作り方を書いておく。

参考情報:
External Paging and Sorting
Displaytag library in your portlet

通常、コノ手の表はJSFベースでナントカFaces使って片付けるんでしょうね。
でも、今回は個人的な方針の都合でSpringベースだから、Displaytagを使う。
  1. Displaytagポートレットを作る
    まず、通常のセットアップとして、Displaytagのライブラリを、アプリケーションのWEB-INF/libに入れる。
    参考情報:Installation Guide

    次に、クラスパスにdisplaytag.propertiesファイルを追加する。
    displaytag.propertiesファイルに、この一文を書き込む。
    factory.requestHelper=org.displaytag.portlet.PortletRequestHelperFactory
    参考情報:JSR-168 Portlet Support

    これで、ポートレットにDisplaytag表を追加して、ソートやページングさせる準備が整う。
    実は、このファイルが無くても、Displaytag表は表示できる。
    が、ソートやページングができない。

  2. ソート、ページングができる表を作る
    ソートやページングができる表を作るには、二つ方法があるらしい。
    Valuelistパターンを使う方法と使わない方法。
    今回はValuelistパターンを使う方法を採用した。

    この方法だとorg.displaytag.pagination.PaginatedListインタフェイスの実装が必要。
    で、探したところ幾つか見つけて、コレはその中の一つ。
    Displaytag library in your portlet

    具体的に、どう使うかって言うと…
    まず、Springのコントローラから渡すモデルMapに、このPaginatedList実装をプットする。
     Map model = new HashMap();
     // 表示するデータのリストを取得する
     List list = this.logpageDao.readLogmessages(filePath,log4jPattern);
     // displaytagでソート、ページングできるリストへ変換
     PaginatedListImpl list2 = new PaginatedListImpl(request);
     list2.setList(list);
     model.put("list", list);
    次に、JSP側で、Displaytag表で表示するデータに、このPaginatedList実装を指定する。
     <portlet:renderURL var="viewListURL" />
     <display:table name="list" sort="external" defaultsort="1" requestURI="${viewListURL}" pagesize="20" id="element" >
      <display:column property="lineNumber" title="LN" sortable="true" sortName="lineNumber" />
      <display:column property="data" title="DT" />
     </display:table>
    
    「pagesize="20"」で1ページに20レコードを指定。