2007 年 4 月 2 日 23 時 56 分

Parameter Bean の設計(リバイズ)


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


# だいぶ寝ぼけてたのでリバイズしました

続いて、Parameter Bean だ。

Parameter Bean は個々のフォームに対応しているため、
フォームの数だけ必要となる。

画面のイメージは既に作成してあるので、
その中にどんなフォームが必要か考えてみよう。

1. 一覧表示画面(list.jsp)

この画面は上と下で 2 つのフォームに分けることができる。

上のフォームは「編集」ボタンのみである。
このボタンを押すと、フィルタの情報編集画面に遷移する。
ということはこのボタン、事実上リンクと変わらないため、
パラメータ等は一切必要ないことになる。

今回はパケットフィルタが 1 セットしかないので良いが、
もし、内向きと外向きなど、複数のセットがある場合は、
そのセット番号などを渡し、編集画面に遷移となるだろう。
この場合は、ちゃんとしたフォームにする必要がある。

次に、下のフォームは「一覧画面」であり、
Bean の集合(狭義には配列や List)を管理するためにある。
これまたボタンだらけであり、パラメータはほとんどない。
ま、レコードの左に並んでいるチェックボックス位か。

チェックボックスには、値としてインデックスを設定し、
チェックされたものだけを、数値で受け取るようにしよう。
このフォーム、実はややこしいのだが、今は深く考えない。

ManageFilterRulesForm:
    int[] selected

2. パケットフィルタの情報編集画面

FilterInfo (Data Bean) を編集するための画面だ。
当然ながら、FilterInfo と同じ構造になるので、
この際、FilterInfo を流用してしまおう。

FilterInfoForm:
    FilterInfo info

3. 個々のルールの編集・追加画面

これも 2 番と同じでイメージが沸きやすい。

FilterRuleForm:
    int index
    FilterRule rule

これも FilterRule と同じ形式になるので流用する。
ただし、追加として編集中の番号を表す index が必要だ。
index がないと、どれを編集しているのか分からなくなる。

こんなもんかな。

では、上記設計を元に、ActionForm 化しよう。

========== ManageFilterRulesForm.java ==========
package jp.loafer.test.forms;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class ManageFilterRulesForm extends ActionForm {

    public ManageFilterRulesForm() {
        super();
    }

    public int[] getSelected() {
        return selected;
    }
    public void setSelected(int[] selected) {
        this.selected = selected;
    }

    @Override
    public void reset(ActionMapping mapping,
            HttpServletRequest request) {
        super.reset(mapping, request);
        selected = null;
    }

    private int[] selected;

    static private final long serialVersionUID = 1L;

}
========== end of ManageFilterRulesForm.java ==========

========== FilterInfoForm.java ==========
package jp.loafer.test.forms;

import javax.servlet.http.HttpServletRequest;

import jp.loafer.test.beans.FilterInfo;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class FilterInfoForm extends ActionForm {

    public FilterInfoForm() {
        super();
    }

    public FilterInfo getInfo() {
        return info;
    }
    public void setInfo(FilterInfo info) {
        this.info = info;
    }

    @Override
    public void reset(ActionMapping mapping,
            HttpServletRequest request) {
        super.reset(mapping, request);
        info = new FilterInfo();
    }

    private FilterInfo info;

    static private final long serialVersionUID = 1L;

}
========== end of FilterInfoForm.java ==========

========== FilterRuleForm.java ==========
package jp.loafer.test.forms;

import javax.servlet.http.HttpServletRequest;

import jp.loafer.test.beans.FilterRule;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;

public class FilterRuleForm extends ActionForm {

    public FilterRuleForm() {
        super();
    }

    public int getIndex() {
        return index;
    }
    public void setIndex(int index) {
        this.index = index;
    }

    public FilterRule getRule() {
        return rule;
    }
    public void setRule(FilterRule rule) {
        this.rule = rule;
    }

    @Override
    public void reset(ActionMapping mapping,
            HttpServletRequest request) {
        super.reset(mapping, request);
        index = -1; // 新規
        rule = new FilterRule();
    }

    private int index;
    private FilterRule rule;

    static private final long serialVersionUID = 1L;

}

========== end of FilterRuleForm.java ==========

Struts を使う場合、Parameter Bean は全て ActionForm だ。
Data Bean を内包オブジェクトとして使っているため、
若干のコードが削減されている。



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