このアーカイブは同期化されません。 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 プロパティで取得できるというわけだ。