Entering Passive Mode

カテゴリ 'Java' の記事
< 1 2 3 4 5 6 7... >

複数同時移動の処理

次は上へ・下へボタンの処理だ。

これもインデックスを使っての操作となるが、
削除のように簡単にはいかない。
ちょっとしたアルゴリズムとも言えるかも。

これはインデックスを使って入れ替えが必要なので、
昨日と同じように、インデックスのずれにも注意が必要だ。

上に動かす場合を例として、方針を練ってみよう。

List#remove と index

次に注目するのは、削除ボタンである。

これらは、ルールの数に影響を与える処理なので、
実装において留意すべきことがある。

ルールは List<FilterRule> という集合型だ。
List から要素を削除する場合、remove メソッドを使うのだが、
remove には 2 種類のオーバーロードがある。

一つは int 型のインデックスを引数に取るもの。
もう一つは、削除するインスタンス自身を引数に取るもの。

有効・無効ボタンの実装

では、ボタンの動作を作っていこう。

まずは、有効・無効ボタン。これはかなり簡単にできる。

========== 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>

Logic タグライブラリ

一覧画面

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

一覧の表示は 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 のインスタンスを用意する必要がある。

DitpatchAction: 複数ボタン対応 Action

管理系フォームに対応した Action を作る場合、
どのボタンが押されたかどうか判断して、
処理を分岐するコードが必要となる。

Action クラスを継承して作ってもいいのだが、
Struts には、DitpatchAction というクラスがあり、
管理系フォームの実装の手間を少し軽減してくれる。

DitpatchAction を基底クラスとして使うと、
送信されたパラメータの値に対応して、
適切なメソッドの呼び出しを行ってくれるのである。

管理系フォームの HTML を作る

昨日の考察を元に、ルール管理フォームの設計をしよう。
今回は、実装の容易さを考え、<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 ===========

< 1 2 3 4 5 6 7... >
このページのトップへ戻る
© 2008 Project Loafer/Project Fireball and all blog writers. Powered by Nucleus CMS