[mayaa-dev:119] Re: forEach の挙動について
duran
[E-MAIL ADDRESS DELETED]
2009年 11月 5日 (木) 14:04:35 JST
ふたがわさん
ご回答ありがとうございます。
# devじゃなくて user の方に出すべきでしたね・・・
size等、itemsで指定しているオブジェクトに対しての
メソッド呼び出しが設定されていないか確認しましたが、
設定されていませんでした。
組み合わせの環境を提示していませんでしたが、
Mayaa + Webwork2
Mayaa + Struts2
の環境で発生しています。
どちらも最新のMayaaを使用しています。
もう少しローカル環境でデバッグしてみます。
> ふたがわ (jfut) です。
>
> # コミッタではないですが。
>
> On 2009/11/04 11:19, duran wrote:
>
>> すいません、forEachの挙動で確認したいことがあります。
>>
>> 下記のように書いた場合に、
>> getMemberListが呼ばれると思うのですが、
>> getMemberListが二回呼ばれています。
>> これは仕様でしょうか?
>>
>> <m:forEach items=${memberList} var="member">
>
> 手元のMayaa 1.1.27では同様のケースで2回呼ばれることはないようです。
> m:extends や m:insert を含む別のところで、
>
> <m:write m:id="memberList.size" value="${ memberList.size() }" />
>
> などのように、呼び出している箇所があるのではないかと思います。
> 問題となっている m:forEach をコメントアウトして、2回呼び出されていた
> getMemberList が1回も呼ばれなくなるような状況でしたら、何か他に
> 問題があるのかもしれません。
>
> 以下、余計な内容ですが、意図しない呼び出しを予防するために、
> 勝手ルールでは必要となるパラメータをすべて m:beforeRender で
> 定義するようにしています。
>
> <m:beforeRender><![CDATA[
> //
> // [require]
> // - action.getMemberList()
> // [optional]
> // - action.getHogeViewDto()
> //
> var memberList= action.getMemberList();
> var hogeViewDto = action.getHogeViewDto();
> ]]></m:beforeRender>
>
> 上記は2つ呼んでいますが、本当は .mayaa 内で action の関数を
> 直接呼び出して良いのは常に action.HogeViewDto 1つというルールです。
> この勝手ルールは、action で定義されている関数を呼べるのが強力すぎて、
> 何でもかんでもテンプレート内から呼んで値を取得していたら、リファクタする
> タイミングでどれがどこで使われているのかが判らなくなり、苦労した経験から
> 出来たルールです。
>
> 以上、ご参考までに。
>
mayaa-dev メーリングリストの案内