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