最近の記事
- 4/22 - 思い出の紙時計
- 3/29 - さくらインターネットの VPS リニューアル
- 3/19 - SSHD への攻撃を分析してみた
- 3/9 - キーボードの過酷さ
- 3/8 - .NET のパフォーマンスについて
- 3/7 - phpMyAdmin への攻撃
- 3/1 - ミイラ取りがミイラになりかけた
- 2/22 - URL を知らなければ安全だと?
- 2/16 - 決意
- 1/30 - ルーターの UPnP 対応状況
Entering Passive Mode
では、ボタンの動作を作っていこう。
まずは、有効・無効ボタン。これはかなり簡単にできる。
========== ManageRulesAction#enable ==========
public ActionForward enable(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
では、一気にルールの内容も表示してみよう。
=========== /WEB-INF/pages/filter/list.jsp ===========
(…省略…)
<logic:iterate name="filter" property="rules"
id="rule" indexId="i">
<tr>
<td>
<input type="checkbox"
name="selected" value="${i}" />
</td>
<td>
<logic:equal name="rule"
property="enabled" value="true">
○
</logic:equal>
</td>
<td>
<bean:message
key="value.action.${rule.action}" />
</td>
<td>
<logic:iterate name="rule" property="protocols" id="proto">
<bean:message
key="value.protocol.${proto}" />
</logic:iterate>
</td>
<td>
<bean:write name="rule"
property="source.network" />
</td>
<td>
<bean:write name="rule"
property="source.port" />
</td>
<td>
<bean:write name="rule"
property="destination.network" />
</td>
<td>
<bean:write name="rule"
property="destination.port" />
</td>
<td>
<bean:write name="rule"
property="note" />
</td>
<td>
<button name="edit" value="${i}">
編集
</button>
</td>
</tr>
ルールが追加できるようになったので、
今度はその内容を一覧画面で表示したい。
一覧の表示は list.jsp なので、
タグライブラリを駆使してデザインしなければならない。
今回、ルールは複数存在するので、一覧を作るためには、
各ルールに対して繰り返し処理が必要になる。
このような処理は、Logic タグライブラリを使って行う。
=========== /WEB-INF/pages/filter/list.jsp ===========
<?xml version="1.0" encoding="UTF-8" ?>
ルールの追加は、/filter/update-rule.do が受ける。
edit-rule.jsp からフォームが送信されると、
FilterRuleForm 型インスタンスとして受け取るので、
このデータを使ってパケットフィルタの設定を更新する。
ま、やることは FilterInfoForm の時と同じだ。
まずは、Struts 設定ファイルの、<action> を修正する。
<!-- ルール更新 -->
<action path="/filter/update-rule"
name="filterRuleForm" scope="request"
input="/WEB-INF/pages/filter/edit-rule.jsp"
type="jp.loafer.test.actions.UpdateFilterRuleAction"
cancellable="true">
今日は edit-rule.jsp を修正し、追加画面を表示する。
HTML タグライブラリを使ってフォームを作る場合、
先に送信先のダミー Action を登録しておかなければならない。
そこで、Struts 設定ファイルにダミーを追加する。
まずは、filterRuleForm の <form-beam>
FilterRuleForm クラスはすでに設計済みなので楽だ。
<form-bean name="filterRuleForm"
type="jp.loafer.test.forms.FilterRuleForm" />
先にある程度の数のルールを用意しておかなければ、
ルール管理画面の動作をテストすることができない。
なので、最初に「追加」処理から着手していこう。
追加処理は、ルール管理画面の追加ボタンが起点である。
ボタンを押すと、ManageFilterRulesAction#add が呼ばれる。
その後、追加用の入力画面に遷移すればよい。
追加画面は編集画面と同じつくりで構わないので、
View としては edit-rules.jsp を使うことができる。
edit-rules.jsp は FilterRuleForm を表現したものなので、
FilterRuleForm のインスタンスを用意する必要がある。
管理系フォームに対応した Action を作る場合、
どのボタンが押されたかどうか判断して、
処理を分岐するコードが必要となる。
Action クラスを継承して作ってもいいのだが、
Struts には、DitpatchAction というクラスがあり、
管理系フォームの実装の手間を少し軽減してくれる。
DitpatchAction を基底クラスとして使うと、
送信されたパラメータの値に対応して、
適切なメソッドの呼び出しを行ってくれるのである。
昨日の考察を元に、ルール管理フォームの設計をしよう。
今回は、実装の容易さを考え、<button> を使うことにする。
では、list.jsp に枠組みを作っていこう。
=========== /WEB-INF/pages/filter/list.jsp ===========
<?xml version="1.0" encoding="UTF-8" ?>
(…省略…)
<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>
<!-- TODO: ルール内容の表示 -->
</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>
(…省略…)
=========== end of /WEB-INF/pages/filter/list.jsp ===========
そろそろ次のステップに移るか。
次に着手するのが、一覧画面のルール管理用フォームだ。
このフォームは今までのものと少し違う。
従来のフォームは、特定の Bean の内容を編集するものであり、
フォームの項目は Bean のプロパティに対応している。
イメージとしては、プロパティダイアログボックスで、
内容を編集後、OK ボタンを押して内容を更新する。
ルール管理用のフォームは、Bean 一覧の管理を行うものであり、
フォームの項目に入力項目は少なく、ほとんどがボタンである。
イメージとしては、コレクション一覧表示のウィンドウで、
各種ボタンを使って並べ替えや移動・追加・削除を行う。
メッセージリソースを使いだしたので、
検証エラーのメッセージにもリソースを使ってみよう。
現在メッセージは ActionForm に直接記述しているので、
このままでは多言語化することはできない。
そのため、メッセージをプロパティファイルに移し、
それを参照するような形に修正する。
========== Messages_ja.properties ==========
# エラーメッセージ