[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 メーリングリストの案内