MayaaとSAStrutsのちょっと相性の悪いところ
今はSAStruts + mayaaで開発しているのですが、S2Struts + mayaaのノリでStrutsのtaglibなどを使うとpublicフィールドとの相性が悪くてうまく動かないことがありますね。mayaaの利点のひとつに既存のtaglibを流用できるというのがあるので、これはちょっと痛いのではないかと思います。
たとえば、
<m:forEach m:id="loop" items="${dto.employeeList}" var="employee" /> <bean:write m:id="employeeNo" name="employee" property="employeeNo" />
などとするとemployeeはMapでラップされていないから、「getterがありません」などと言われてしまいます。
なので、
<m:forEach m:id="loop" items="${dto.employeeList}" var="employee" /> <m:write m:id="employeeNo" value="${employee.employeeNo}" />
と書くように改めるのがいいんですかね。
でも、<bean:write>ならともかく、<html:text>の代替をmayaaでやるのはかなり面倒そうです。
どうにか<html:text>を使えないものかと調べてみると、ListWrapperでラップすれば大丈夫らしいということがわかりました。
ということは…
default.mayaa
<m:beforeRender><![CDATA[ var ListWrapper = Packages.org.seasar.struts.action.ListWrapper ]]></m:beforeRender>
<m:forEach m:id="loop" items="${new ListWrapper(dto.employeeList)}" var="employee" /> <m:write m:id="employeeNo" value="${employee.employeeNo}" />
ってことでしょうかね。
mayaaのためにActionの中でラップするのは変な気がしますし。
まあ、いずれにせよpublicフィールドを使うなら「mayaaはS2Strutsの時と全く変わりません!」というわけにはいかない、ということですね。
(あるいはdtoにlistを詰めてるのがおかしい?)