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