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

Yasuo Higa [E-MAIL ADDRESS DELETED]
2011年 4月 19日 (火) 12:47:42 JST


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

> 
> そうであるとすると、
> 
> リクエストの属性として直接コンポーネントを保持するよりは
> 例えば、 専用のリクエスト属性(例:  
> "_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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
> 


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