[Seasar-user:14777] Re: 【SAStruts】Actionのプロパティへのインジェクションする対象の範囲を指定できないでしょうか。
IZUNO Tadashi
[E-MAIL ADDRESS DELETED]
2008年 6月 23日 (月) 11:24:08 JST
いづのです。
スレッド分けた方がいいのかもしれませんが・・・
Bindingアノテーションでリクエストパラメータから設定されないようにはできたんですが、Actionのユニットテストを行う際に
jdbcManagerがprivateになってしまったのでテストケースからアクセスできないようになってしまいました。
リフレクション使って設定するようにしたんですが、なんかしっくりこないのでなにか良い方法はないものでしょうか。
テストケースの記述はhttp://ml.seasar.org/archives/seasar-user/2008-February/013045.htmlを参考にしています。
s2-framework-2.4.25.jar
sa-struts-1.0.2.jar
/**
* RequestからjdbcManagerがセットされないようにしたAction
*/
public class HogeAction {
@Binding
private JdbcManager jdbcManager;
public String index(){
・・・
}
}
public class HogeActionTest extends S2TestCase {
private JdbcManager jdbcManager;
@Before
public void setUp() throws Exception {
include("app.dicon");
}
public String testIndex(){
HogeAction a = new HogeAction();
a.jdbcManager = jdbcManager; //ここが見えなくなってしまいました。
・・・
}
}
2008/6/19 Satoru Okamoto <[E-MAIL ADDRESS DELETED]>:
> cynipeです。
>
> S2の管理下にあるクラス内であればBindingアノテーションを使って取得するこ
> とができるので、Bindingアノテーションを使ってprivateにしておけばよいかと
> 思います。
>
>> public class HogeAction {
> @Binding
> private JdbcManager jdbcManager;
> ^^^^^^
>>
>> public String index(){
>> ・・・
>> }
>> }
>
> ページ上に表示するもの以外をpublicにしておくと今回のように外から叩けたり
> してしまうので上記の形で対応されるのが良いかと思います。この形ならsetter
> を書く必要もないですし。
>
> 以上よろしくお願いします。
>
> IZUNO Tadashi さんは書きました:
>> 伊津野といいます。
>>
>> SAStrutsのActionにリクエストのパラメータ名と同じ名前のpublicなプロパティを定義しておけば、勝手に設定されますが、これを設定されないようにすることはできないでしょうか。
>> HttpServletRequestやJdbcManagerなどコンテナのコンポーネントから設定されることを期待するプロパティでもリクエストのパラメータ名に同一の物があれば設定されてしまいます。
>>
>> 具体的には
>> public class HogeAction {
>> public JdbcManager jdbcManager;
>>
>> public String index(){
>> ・・・
>> }
>> }
>>
>> というActionの場合、/hoge/?jdbcManager=1みたいなリクエストを送ると、IllegalPropertyRuntimeExceptionが起きてしまいます。
>> インジェクションする対象の範囲を指定することはできないでしょうか。
>> チュートリアルのdownloadアクションでも再現できます。(/download/download?response=1)
>>
>> s2-framework-2.4.25.jar
>> sa-struts-1.0.2.jar
>>
>> 以上
>> --
>> [E-MAIL ADDRESS DELETED]
>> _______________________________________________
>> 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 メーリングリストの案内