Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

nested:iterateの子LIST表示について

お世話になっております。
iterateについての質問です。

以下のような画面に出力するdto(bean)の中にLIST型で情報を集め、更にそのLIST型の中にLIST型で詳細情報をまとめたものが存在しているとします。

◆testDto.java要素
・String AAA
・List<TestBean> beanList
public List<TestBean> getBeanList() {
 return beanList;
}

◆TestBean.java要素
・String testDay
・List<TestDayBean> dayList
public List<TestDayBean> getDayList() {
 return dayList;
}

◆TestDayBean.java要素
・String id
・String name
・String type

※例のBean要素には全てゲッターセッターが存在します

このtestDto.javaクラスをStrutsConfigにDTOという名前で登録した場合、以下の様な記述でbeanListの中身を確認することが出来ました。

<nested:iterate name="DTO" property="beanList" indexId="idx">
 <nested:write property="testDay" />
</nested:iterate>

その後、子Listのnameを表示したかったので以下のように記述すると「Bean DTO のプロパティ dayListに対するゲッターメソッドがありません」エラーで弾かれてしまいました。

<nested:iterate name="DTO" property="beanList" indexId="idx">
<nested:iterate name="DTO" property="dayList" indexId="idx">
 <nested:write property="name" />
</nested:iterate>
</nested:iterate>

以下のような記述でも試して見ましたが同様のエラーが検出されました。

<nested:iterate name="DTO" property="beanList.dayList" indexId="idx">
 <nested:write property="name" />
</nested:iterate>

エラーの内容を見ると、定義しているDTO(testDto.java)に子Listのゲッターが見つからないと言われていると思うのですが、beanListの中にbeanListを詰めるという構造のdtoからどうやって子要素を取得するのか、調べてみたのですが見つけることができませんでした。
どなたか分かる方が居ましたらご教授願えないでしょうか?

7

回答

11961

閲覧

7件の回答

評価

0

内側のforは外側のforで取り出されたbeanから採るんじゃないの?なんで大元のDTOから取りだそうとしてるの?

評価

0

すぐ実行できる環境が無いので、試していませんが、
ドキュメントを見ると、nested:iterateのname属性は
requiredでは無いので

<nested:iterate name="DTO" property="beanList" indexId="idx">
<nested:iterate property="dayList" indexId="idx">

とかできませんかねぇ?

評価

0

返答ありがとうございます。

>>$さん、satomiさん
nested:iterateで書いているので、StrutsConfigで定義している変数でないと取れないという認識でした。
satomiさんの指摘を受け、修正して見ましたが「コレクションが見つかりません」というエラーに変わりました。

$さんの指摘を受け、iterateで受けたlistをiterate内部でループさせて内容を表示しようとしていますがうまくいきません。
参考になりそうなサイトはありませんでしょうか?

<nested:iterate name="DTO" property="beanList" indexId="idx">
 <c:forEach var="obj" items='<nested:write property="dayList" />' varStatus="status">
  <c:out value="obj.name"/>
 </c:forEach>
</nested:iterate>

上記の書き方ですと、エラーにはなりませんが内容が表示されない一覧表が画面に表示されてしまいます。

評価

0

あれからネット等で調べ、どうにか解決したので一応記述しておきます。
お世話になりました。

<nested:iterate id="aaa" name="DTO" property="beanList">
 <nested:iterate id="bbb" name="aaa" property="dayList" indexId="idx">
  <nested:write name="bbb" property="name"/>
 </nested:iterate>
</nested:iterate>

評価

0

なにか書き方からして

struts-logic の prefix を nested にしてそう。

評価

0

struts taglibのlogic:iterateはid必須だから、
ちゃんとstruts taglibのnested使ってると思うよ。

評価

0

> satomiさん

[ 2011-11-22 17:29 ]の状況でおわってるから。(id設定)

nest された iterator のほうの id が追加されてることに注
目。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。