2007 年 4 月 28 日 23 時 26 分

Logic タグライブラリ


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


[写真]


ルールが追加できるようになったので、
今度はその内容を一覧画面で表示したい。

一覧の表示は list.jsp なので、
タグライブラリを駆使してデザインしなければならない。

今回、ルールは複数存在するので、一覧を作るためには、
各ルールに対して繰り返し処理が必要になる。
このような処理は、Logic タグライブラリを使って行う。

=========== /WEB-INF/pages/filter/list.jsp ===========
<?xml version="1.0" encoding="UTF-8" ?>

<%@ page contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" %>

<%@ taglib prefix="html"
        uri="http://struts.apache.org/tags-html" %>
<%@ taglib prefix="bean"
        uri="http://struts.apache.org/tags-bean" %>
<%@ taglib prefix="logic"
        uri="http://struts.apache.org/tags-logic" %>

(…省略…)

    <html:form action="/filter/manage-rules">
        <table>
            <caption>フィルタルール</caption>
            <tr>
                <th rowspan="2"></th>
                <th rowspan="2">有効</th>
                <th rowspan="2">処理</th>
                <th rowspan="2">プロトコル</th>
                <th colspan="2">発信</th>
                <th colspan="2">宛先</th>
                <th rowspan="2">備考</th>
                <th rowspan="2"></th>
            </tr>
            <tr>
                <th>アドレス</th>
                <th>ポート</th>
                <th>アドレス</th>
                <th>ポート</th>
            </tr>

<logic:iterate name="filter" property="rules"
        id="rule" indexId="i">

            <tr>
                <td colspan="10">
                    <bean:write name="i" />:
                    <bean:write name="rule"
                            property="note" />
                </td>
            </tr>

</logic:iterate>

        </table>
        <p>
            <button name="command" value="add">追加</button>
            |
            <button name="command" value="moveUp">上へ</button>
            <button name="command" value="moveDown">下へ</button>
            <button name="command" value="enable">有効</button>
            <button name="command" value="disable">無効</button>
            <button name="command" value="delete">削除</button>
        </p>
    </html:form>

</body>

</html:html>
=========== end of /WEB-INF/pages/filter/list.jsp ===========

Logic タグライブラリも、struts-taglib に含まれている。
ページ先頭で taglib ディレクティブを使って宣言する。

繰り返しを行うのは、<logic:iterate> 要素である。
お馴染みの name と property 属性で指定するのは、
配列や List 等の集合系の型である必要がある。

<logic:iterate> の内容は項目用のテンプレートとなり、
これは集合の各要素に対して適用され、展開される。

id 属性は、処理中の要素を保持するページ属性の名前だ。
<logic:iterate> 内部では、他のタグライブラリの
name 属性を使って処理中の要素を参照できるようになる。

indexId 属性は必須ではないが、この属性を指定しておくと、
<logic:iterate> 内部で、ループの回数を得ることができる。
これも id と同様、ループ回数を表す 0 ベースの値が、
指定したページ属性に登録されるので使うことができる。

<logic:iterate name="filter" property="rules"
        id="rule" indexId="i">

この場合、どこかの属性に格納された filter 属性の、
getRules() 呼び出しの戻り値が集合型ならば、
その各要素に対して繰り返し処理する。
その際、繰り返し回数はページの i 属性に、
繰り返し中の要素は、ページの rule 属性に格納される。

さて、要素内部にはテストとして備考だけを表示させてみた。
<logic:iterate> の id 属性に「rule」を指定したので、
<bean:write> 要素では name 属性「rule」で参照できる。
rule に格納されているのは FilterRule インスタンスなので、
備考は note プロパティで取得できるというわけだ。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.