リストのページャをつくる

<< 戻る   トップ >>

リストで表示する件数を制限する話のつづきである。<c:forEach> タグには begin と end 属性が、 <h:dataTable> タグには first と rows 属性があってリストの一部を表示することができる。ただし、どうやら全リストを取得して不要部分を切り捨てる動作をしているように思える。全リストが長大な場合には無駄の多い処理になるだろう。

さて、「ボタンをとりつけて前後させる処理」すなわちページャ機能を取り付けようと思った。よく考えてみれば、リストの表示開始値・長さを指定する form が基本なのだと気づくはずだが、なにしろ鈍っているので、<input type="hidden"/> はなんとなくイヤだな、ならばリストの表示開始値をどうやって保存しようか、とか余計なことを考えてしまった。

そこで思いついたのがセッションに記憶させることである。幸い「暗黙のオブジェクト」の表は簡単に参照できたので、session または sessionScope に保存すればよいのではないかとあたりをつけた。ならば代入文を書けばよいだけだ。<% session.listFirst = 0 %> とかやればいいはずだ... と思ったのだが、なんとそもそも facelet は スクリプト要素を受け付けてくれない。facelet は JSP のようで JSP ではないのだ。session スコープへの代入は、JSTL コアタグを用いて <c:set var="first" value="1" scope="session" /> と記述する。これと<c:choose> (switch文である。switch にしておけばよかったのに。) を組み合わせて、増分処理はいちおう完成した。

           <c:choose>
                    <c:when test="#{empty first}">
                        <c:set var="first" value="1" scope="view" />
                        <div>initialize</div>
                    </c:when>
                    <c:otherwise>
                        <c:set var="first" value="#{first+5}" scope="view"/>
                        <div>increment </div>
                    </c:otherwise>
            </c:choose>

なお、scope は session より狭く request より広い view に変えてある。

いずれにせよ、通常(非 Ajax ) の画面遷移を行うのであれば、すなおにフォームを使用すべきなのである。


作成: 2013-07-09 10:29:00.0更新: 2013-07-10 15:40:09.0
http://museo-anonimo.jp/nanban/?id=1218,http://museo-anonimo.jp/nanban/tr/1218