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

白井 薫 [E-MAIL ADDRESS DELETED]
2011年 4月 16日 (土) 12:36:18 JST


ひが 様

ご返信、ありがとうございました。

いただいたヒントをもとに調べてみました。
なるほど、確かにその通りでした…。

詳しくは、次のような構図でのエラーです:
最初に書いた状況は正確ではありませんでした。すみません。m(__)m

http://kaorukobo.net/fspl/fspl.cgi/1272/screen_8.png

   ※IllegalArgumentException が起きたのはAction 
に適用された Interceptor

アクションの基本クラス ActionBase で
   @Resource
   public ComponentB componentB;
となっていたのを protected にすると、
エラーが起こらなくなりました。

( componentA はすでに protected になっていたため
 エラーが起こらなかったようです。)


不思議なのは、
> exportPropertiesToRequest
は、 アクションやフォームのプロパティを
WrapperUtil.convert(BeanWrapper) でラップして
Request の attribute にセットする処理だと思うので、
この処理の影響はフォワードされた JSP 内部にとどまり
コンテナには影響を与えないように思うのですが、

どうして Interceptor の生成時の自動バインディングに
このラップされたオブジェクトがセットされるのだろうか…と不思 
議に思いました。

--
白井 薫



>>
> componentBがアクションフォームのプロパティ名と
> 同一ではありませんか?
>
> SAStrutsのS2RequestProcessor#exportPropertiesToRequest()で
> フォームのプロパティ名でリクエストの属性に設定しているので
> アクションフォームにcomponentBというプロパティがある 
> とそうなる
> 可能性があります。
>
> どういうときにその可能性があるかというと、
>
> SAStrutsのS2RequestProcessor#doForward()を見てください。
> isExportablePath()がtrueを返すのは、.がついていて.do 
>> ついていないものです。
>
> これは通常、JSPのパスを返します。
> .xxxのようなパスにフォワードしているけど、実はそれは
> アクションだというときに最初の問題が起きる可能性が
> あります。





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