[Seasar-user:7085] Re: [Seasar2+S2Struts]Form のスコープがリクエストの場合にIllegalPropertyRuntimeException

Koichi Kobayashi [E-MAIL ADDRESS DELETED]
2007年 4月 6日 (金) 18:00:40 JST


小林 (koichik) です.

Date:    Fri, 6 Apr 2007 16:54:01 +0900
From:    [E-MAIL ADDRESS DELETED]
To:       [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:7084] [Seasar2+S2Struts]Form のスコープがリクエストの場合にIllegalPropertyRuntimeException

> 基本的に2.4の新機能等は使わず、デプロイもノーマルモードで行っています。
> コードを追ってみたところ、どうやらFormのスコープをリクエストにした場合、
> BeanValidatorFormでラッピングされているためにActionと上手くバインドできて
> いないようです。

S2Struts の方を把握していないのでこの意味が
よく分からないのですが,コンポーネント定義では

<component name="sv0101d01Form" class="xxx.Sv0101d01Form" instance="request"/>

のようになっているのに,実際に HttpRequest に
sv0101d01Form という名前で設定されているのは
Sv0101d01Form ではなく BeanValidatorForm で,
それは Sv0101d01Form に代入可能ではない,
ということでしょうか?

だとすると,従来動いていたのが正しいわけではなく,
たまたま動いていただけという気がします.
HttpRequest に設定されているオブジェクトと
コンポーネント定義が矛盾している状態なので.

Seasar2 のことだけ考えると,ご指摘いただいた部分に
型チェックを追加するのではなく,request スコープの
コンポーネントを取得する際に型チェックを追加し,
コンポーネント定義と HttpRequest の内容が矛盾
している場合は例外をスローするのがあるべき姿のように
思います.
ただし,この修正では田村さんの問題は解決しません.

解決するにはコンポーネント定義と HttpRequest が
もし矛盾しているならそれを解消してもらわないと
いけないと思うのですが,これは S2Struts では
そうなってしまうのでしょうか?

> Formをセッションにしてしまえばとりあえず通るのですが、できればリクエストで
> いきたいと考えています。

Form がセッションであってもコンポーネント定義と
HttpSession の内容が矛盾していれば同じ現象に
なると思うのですが,なぜ通るのか不思議です.


--
<signature>
   <name>Koichi Kobayashi</name>
   <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>




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