[mayaa-user:757] List<Bean>要素のListフィールドへのアクセス方法(多重ループ)
Sachiko Suzuki
[E-MAIL ADDRESS DELETED]
2009年 3月 6日 (金) 14:17:08 JST
鈴木と申します。
SAStruts+Mayaaの環境において、
2次元配列のデータを使用してテーブルを操作する方法について質問させてください。
リクエストスコープ上のデータは以下の様になっています。
List<CategoryBean>
⇒ CategoryBean
・categoryName(String)
・colspan(int)
・rowspan(int)
・categoryShowFlg(int)
・lowerCategoryName(String)
・eachDetailInfoList(List<DetailInfoBean>)
⇒ DetailInfoBean
・detailName(String)
・style(String)
CategoryBeanのListの要素にDetailInfoBeanのリストが存在します。
基本的にはCategoryBeanのdetailNameが行に、DetailInfoBeanが列に相当し
列、行共に可変です。
lowerCategoryNameは出力する場合と、そうではない場合とあり
それに合わせてセルの結合を行なっています。
(categoryNameが大分類、lowerCategoryNameが中分類というイメージです)
--作成したいテーブルのHTML--
<table>
<tbody>
<tr>
<td colspan="2" nowrap>categoryName</td>
<td>detailName</td>
<td>detailName</td>
<td>detailName</td>
</tr>
<tr>
<td rowspan="2" nowrap>categoryName</td>
<td nowrap >lowerCategoryName</td>
<td>detailName</td>
<td>detailName</td>
<td>detailName</td>
</tr>
<tr>
<td nowrap>lowerCategoryName</td>
<td>detailName</td>
<td>detailName</td>
<td>detailName</td>
</tr>
<tr>
<td colspan="2" nowrap>categoryName</td>
<td>detailName</td>
<td>detailName</td>
<td>detailName</td>
</tr>
</tbody>
</table>
以下の様にして実行しました。
--HTML--
<table>
<tbody id="categoryLoop">
<tr>
<td class="topt" id="topcatergory" colspan="0" rowspan="0">
<span id="toptd">
<span id="topname">testtop</span>
</span>
</td>
<td class="style25" id="visible">
<span id="td">
<span id="middlecatergory">testmiddle</span>
</span>
</td>
<td id="detailLoop">
<div class="style30">
<span id="color">
<span id="act">aaaa</span>
</span>
</div>
</td>
</tr>
</tbody>
</table>
--mayaa--
<m:for m:id="categoryLoop" m:init="${ var i=0 }"
m:test="${ i < actionForm.categoryBeanList.size() }" m:after="${ i++ }">
<m:exec script="${ var categoryRow = actionForm.categoryBeanList.get(i);}"/>
<m:doBody />
</m:for>
<m:if m:id="topcatergory" test="${ categoryRow.categoryShowFlg == 1 }" />
<m:element m:id="toptd" name="td" >
<m:attribute name="colspan" value="${ categoryRow.colspan }" />
<m:attribute name="rowspan" value="${ categoryRow.rowspan }" />
<m:attribute name="class" value="style_a" />
</m:element>
<m:write m:id="topname" value="${ categoryRow.categoryName }" />
<m:if m:id="visible" test="${ categoryRow.colspan == 0 }" />
<m:echo m:id="topcatergory">
<m:attribute name="colspan" value="${ categoryRow.colspan }" />
<m:attribute name="rowspan" value="${ categoryRow.rowspan }" />
</m:echo>
<m:element m:id="td" name="td" >
<m:attribute name="class" value="style_b" />
</m:element>
<m:write m:id="middlecatergory" value="${ categoryRow.lowerCategoryName }" />
<m:for m:id="detailLoop" m:init="${ var i=0 }"
m:test="${ i < categoryRow.eachDetailInfoList.size() }" m:after="${ i++ }">
<m:exec script="${ var detail = categoryRow.eachDetailInfoList.get(i);}"/>
</m:for>
<m:echo m:id="color">
<m:attribute name="class" value="${ detail.style }" />
</m:echo>
<m:write m:id="act" value="${ detail.actString }" />
上記を実行すると
TypeError: Cannot call method "size" of undefined in script=
i < categoryRow.eachDetailInfoList.size()
となってしまいます。
[mayaa-user:509] <m:forEach>を使った2重ループ
http://ml.seasar.org/archives/mayaa-user/2007-May/000510.html
を参考にさせて頂き、<m:for m:id="detailLoop" ・・・の部分を<m:forEachに変えましたが
どうやらeachDetailInfoListにアクセス出来ないようです。
mayaaを使うようになって、まだ日が浅いので見当違いの方法になっているかもしれませんが
ご教授頂ければ助かります。
よろしくお願いします。
mayaa-user メーリングリストの案内