[mayaa-user:759] Re: List<Bean>要素のListフィールドへのアクセス方法(多重ループ)
Sachiko Suzuki
[E-MAIL ADDRESS DELETED]
2009年 3月 9日 (月) 14:26:34 JST
sugaさま
この度はお世話になっております。鈴木です。
ご回答、どうもありがとうございます。
また、返答が遅くなりまして申し訳ありません。
> m:test="${ java.lang.System.out.println('' + categoryRow.getClass());
具体的なデバッグの方法が思い当たらなかったので、大変助かりました。
(Javaのクラスが使用できるのは理解していたのですが思い当たりませんでした。)
お教え頂いたデバッグ方法でいくつか確認して、
「eachDetailInfoList」にアクセスできるようになりました。
CategoryBeanの「eachDetailInfoList」プロパティのアクセサメソッドのsetterを
Arraylistを引数としたものではなく、要素を追加する様に引数を設定していたのが
原因のようです。
setEachDetailInfoList(DetailInfoBean detailInfoBean){}
としていたのを
setEachDetailInfoList(List<DetailInfoBean> detailInfoBeanlist){}
とした事で解消しました。
(setterは影響がないと思い込んでいました)
また、HTMLとMayaaの方は、教えて頂いた様に変更して実行してみましたが
<td m:id="topcatergory" class="topt" colspan="1" rowspan="1" nowrap="nowrap">
<span m:id="topname">testtop</span>
</td>
の部分が出力されなくなりました。(タグごと出力されていません)
この部分は何とか試行錯誤して試してみようと思います。
今回、sugaさまにご指摘頂いたことで少し理解が深まりました。
お忙しい中、ご回答くださり、本当にどうもありがとうございました。
2009/03/07 21:20 suga <[E-MAIL ADDRESS DELETED]>:
> suga です。
>
> 2009/3/6 Sachiko Suzuki <[E-MAIL ADDRESS DELETED]>:
>> TypeError: Cannot call method "size" of undefined in script=
>> i < categoryRow.eachDetailInfoList.size()
>>
>> となってしまいます。
>
> メールに記載されている情報からでは原因はわかりませんね。
>
> categoryRow の "eachDetailInfoList" というプロパティが未定義となっているので、
> categoryRow のクラスが何なのかを確認するのが早道です。
> 乱暴ですが
> m:test="${ java.lang.System.out.println('' + categoryRow.getClass());
> i < categoryRow.eachDetailInfoList.size() }"
> などとして確認することもできます。
>
>
> 上記の問題が解決した後ですが、多分実現しようとしていることはメールに
> 記載されているものでは上手くいかないと思います。
>
> "topcatergory" の定義が mayaa 側にふたつありますが、最初に出現したものしか
> 使いませんし、m:id="visible" で replace="false" を指定するか、ボディに m:echo を
> 書くかしないと visible の td は消えてしまいます。
>
>
> おそらく、こんな感じで意図した物になると思います。
> ---- html
> (<html xmlns:m="http://mayaa.seasar.org"> として m: を有効にしています
> html の id は無視するように設定するのがおすすめです。
> http://mayaa.seasar.org/documentation/equals_id_resolver.html)
>
> <table>
> <tbody>
> <tr m:id="categoryLoop">
> <td m:id="topcatergory" class="topt" colspan="1"
> rowspan="1" nowrap="nowrap">
> <span m:id="topname">testtop</span>
> </td>
>
> <td m:id="middlecatergory" class="style25">
> <span id="middlename">testmiddle</span>
> </td>
>
> <td m:id="detailLoop">
> <div class="style30">
> <span m:id="color">
> <span m:id="act">aaaa</span>
> </span>
> </div>
> </td>
> </tr>
> </tbody>
> </table>
>
> ---- mayaa
>
> <m:beforeRender><![CDATA[
> // ユーティリティは Java で定義した方が使い回しや速度面で有利ですが、
> // 簡単のためここで定義しています。
> function spanValue(intValue) {
> if (intValue >= 2) {
> return intValue;
> }
> return null;
> }
> ]]></m:beforeRender>
>
> <m:forEach m:id="categoryLoop" items="${ actionForm.categoryBeanList
> }" var="categoryRow">
> <m:echo><m:doBody /></m:echo>
> </m:forEach>
>
> <m:if m:id="topcatergory" test="${ categoryRow.categoryShowFlg == 1 }">
> <m:echo>
> <m:attribute name="colspan" value="${
> spanValue(categoryRow.colspan) }" />
> <m:attribute name="rowspan" value="${
> spanValue(categoryRow.rowspan) }" />
> <m:doBody />
> </m:echo>
> </m:if>
> <m:write m:id="topname" value="${ categoryRow.categoryName }" />
>
> <m:if m:id="middlecatergory" test="${ categoryRow.colspan < 2 }">
> <m:echo>
> <m:attribute name="colspan" value="${
> spanValue(categoryRow.colspan) }" />
> <m:attribute name="class" value="style_b" />
> <m:doBody />
> </m:echo>
> </m:if>
> <m:write m:id="middlename" value="${ categoryRow.lowerCategoryName }" />
>
> <m:forEach m:id="detailLoop" items="${ categoryRow.eachDetailInfoList
> }" var="detail">
> <m:echo><m:doBody /></m:echo>
> </m:forEach>
>
> <m:echo m:id="color">
> <m:attribute name="class" value="${ detail.style }" />
> </m:echo>
> <m:write m:id="act" value="${ detail.detailName }" />
>
> --
> suga ( [E-MAIL ADDRESS DELETED] )
> _______________________________________________
> mayaa-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/mayaa-user
>
mayaa-user メーリングリストの案内