このアーカイブは同期化されません。 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 を内包オブジェクトとして使っているため、
若干のコードが削減されている。