QA@IT

StrutsでListをネストした際、画面の設定値を取得できない

3395 PV

Struts1.3.10で、以下のようにActionForm内でListをネスト
した際に、画面(Jsp)の設定値を取得できずに困っております。

どこが間違っていて、どのようにすれば画面の設定値を取得
できるか、ご教示ください。

ActionForm--------------------------------------------
private List oyaList = null;
//getter
public List getOyaList() {
return oyaList;
}
//setter
public void setOyaList(List oyaList) {
this.oyaList = oyaList;

}

OyaBean-----------------------------------------------
private List koList = null;
//getter
public List getKoList() {
return koList;
}
//setter
public void setKoList(List koList) {
this.koList = koList;

}

KoBean------------------------------------------------
String target null;
//getter
public String getTarget() {
return target;
}
//setter
public void setTarget(String target) {
this.target = target;

}

JSP---------------------------------------------------
//※先頭の<は除去しております。
logic:iterate id="oya" name="oya" property="oyaList">
logic:iterate id="ko" name="ko" property="koList">
html:select name="koList" property="target">
~~Optionsの記述
/html:select>
/logic:iterate>

/logic:iterate>

上記でKoBeanのtargetが取得したいのです。

アドバイス頂きたく、よろしくお願い致します。

回答

これは id="oya"の方のループはちゃんと動いてるんでしょうか?
ちょっと試せる環境が無いので間違っているかもしれませんが、以下の様にできませんか?

<logic:iterate id="oya" name="ActionFormのクラス名" property="oyaList">
  <logic:iterate id="ko" name="oya" property="koList">
    <html:select name="koList" property="target">
      ~~Optionsの記述
    </html:select>
  </logic:iterate>
</logic:iterate>

logic:iterateのnameにはスコープのBeanの名前を指定します。
しかしkoというBeanはおそらくどこでも設定していないので取得できません。

logic:iterateのidはページスコープのJSP Beanの名前になります。
内側ではその名前をnameに指定することで、コレクションの要素のプロパティにアクセスすることができます。

あとは c:forEachを使っても解決できると思います。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。