[Seasar-user:20733] Re: getComponent() で BeanWrapper が返ってくる (Re: HotDeployモードでIllegalArgumentException)

白井 薫 [E-MAIL ADDRESS DELETED]
2011年 4月 19日 (火) 11:37:08 JST


ひが 様

ありがとうございます。

ということは仕様上
   request.setAttribute("name", OBJECT)
によって
・"name"と同じコンポーネント名を持ち
・ InstanceType.REQUEST である
コンテナに登録されたコンポーネントが、
不用意に置き換えられてしまうということでしょうか?


そうであるとすると、

リクエストの属性として直接コンポーネントを保持するよりは
例えば、 専用のリクエスト属性(例:  
"_s2ComponentMap" )を設け
これを HashMap<コンポーネント名, コンポーネント 
 > として
保持させるほうがよいような気がします。



> instance = InstanceType.REQUEST
> のコンポーネントは、インスタンスがリクエストの属性に
> 設定されるので、コンテナ以外が、リクエストの属性に
> 設定するとその影響を受けてしまいます。
>
>> どうして Interceptor の生成時の自動バインディングに
>> このラップされたオブジェクトがセットされるのだろうか…と不思
>> 議に思いました。
>>
>> --
>> 白井 薫
>>
>>
>>
>>>>
>>> componentBがアクションフォームのプロパティ名と
>>> 同一ではありませんか?
>>>
>>> SAStrutsの 
>>> S2RequestProcessor#exportPropertiesToRequest()で
>>> フォームのプロパティ名でリクエストの属性に設定しているので
>>> アクションフォームにcomponentBというプロパティがある
>>> とそうなる
>>> 可能性があります。
>>>
>>> どういうときにその可能性があるかというと、
>>>
>>> SAStrutsのS2RequestProcessor#doForward()を見てください。
>>> isExportablePath()がtrueを返すのは、.がついてい 
>>> て.do
>>>>>> ついていないものです。
>>>
>>> これは通常、JSPのパスを返します。
>>> .xxxのようなパスにフォワードしているけど、実はそれは
>>> アクションだというときに最初の問題が起きる可能性が
>>> あります。
>>
>>
>>
>> _______________________________________________
>> Seasar-user mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-user
>>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>



Seasar-user メーリングリストの案内