[mayaa-dev:120] Re: forEach の挙動について

duran [E-MAIL ADDRESS DELETED]
2010年 1月 2日 (土) 12:10:09 JST


duranです。

明けましておめでとうございます。
今年もよろしくお願い致します。

すいません、前回から時間が経ちましたが、
下記現象の原因が分かりました。

Mayaaが原因ではなく、MayaaとWebworkを連携するモジュールが原因でした。

mayaa-webwork2のWebworkValueStackScope内で、
hasAttributeメソッドがあるのですが、
この中で以下の実装がありました。

Object value = valueStack.findValue(name);
if (value != null) {
  return true;
}

hasAttribute => getAttribute という流れになるので、
2回呼ばれているようでした。

OgnlValueStackに代替となるようなメソッドが見つからなかったので、
2回コールされないようにする対応方法は分かりませんでした。

ただ、getterにロジックを混ぜる事が無いので、
利用に関して特に問題はありません。

以上、お手数お掛け致しました。

> ふたがわさん
> 
> ご回答ありがとうございます。
> 
> # 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 メーリングリストの案内