StrutsでFormに値を突っ込むときのあれこれ

最近結構使ったのでメモ。

以下のコードたちは基本的に、記憶頼り、脳内構築で
動作確認してないので注意。

(1)基本

<input type='text' name="TestForm" property="test">

なんて書くと、submitしたときに

public class TestForm extends Actionform {
    String test = null;

    public void setTest(String test) {
        this.test = test;
    }
    public String getTest() {
        return test;
    }
}

ってあるFormのtestに値を突っ込めるのはStrutsさんの基本。
なんとなく、id、name、propertyの順で書くと分かりやすい気がする。
String testId = TestForm.test;
見たいな感じで。

(2)プロパティにクラス
そして、こんな風に書くと

<input type='text' name="TestForm.TestBean" property="test">
public class TestForm extends Actionform {
    TestBean testBean = new TestBean();

    public void setTestBean(TestBean testBean) {
        this.testBean = testBean;
    }
    public String getTestBean() {
        return testBean;
    }
}
public class TestBean {
    String test = null;

    public void setTest(String test) {
        this.test = test;
    }
    public String getTest() {
        return test;
    }
}

こんな感じで持ってる、TestBeanの中のtestに値を突っ込める。

new TestBean();

newはしておかないと、何とか例外が出る。


(3)プロパティに配列とかリスト
それからそれから

<input type='text' name="TestForm[0]" property="test">
<input type='text' name="TestForm[1]" property="test">

こんな風にも書くことができて

public class TestForm extends Actionform {
    List<String> testList = new ArrayList<String>();

    public void setTestList(List<String> testList) {
        this.testList = testList;
    }
    public void getTestList() {
        return testList;
    }

    public String getTest(int index) {
        return testList.get(i);
    }
}

リスト(配列でも良いはず)の中に値を突っ込める。
property="XXXXX"

getXXXXX
のXXXXXが対応してるから、好きな名前をつけられたはず。
あと、実際にはgetterであうとおぶばうんずを起こさないような実装をする必要がある
こんな感じかしら?

public String getTest(int index) {
    for (int i = testList.size(); i < index; i++) {
        testList.add(new String());
    }
    return testList.get(index);
}


(4)プロパティにクラスのリスト
最後に(2)と(3)の組み合わせ。

<input type='text' name="TestForm[0].TestBean" property="test">
<input type='text' name="TestForm[1].TestBean" property="test">
public class TestForm extends Actionform {
    List<TestBean> testBeanList = new ArrayList<TestBean>();

    public void setTestBeanList(List<TestBean> testBeanList) {
        this.testBeanList = testBeanList;
    }
    public String getTestBean(int index) {
        return testBeanList.get(i);
    }
}

public class TestBean {
  //(略)
}

iterateタグ使ってたり

動的に要素が増えるようなjavascriptを組んでたりする場合にとても便利