[Seasar-user:14780] Re: 【SAStruts】Actionのプロパティへのインジェクションする対象の範囲を指定できないでしょうか。

出羽 健一 [E-MAIL ADDRESS DELETED]
2008年 6月 23日 (月) 13:15:24 JST


出羽です。

@Binding
protected JdbcManager jdbcManager;

のように protected にすれば、同じパッケージからアクセスできるので、
同じパッケージのテストクラスからアクセスできます。

> -----Original Message-----
> From: [E-MAIL ADDRESS DELETED] 
> [mailto:[E-MAIL ADDRESS DELETED]] On Behalf Of IZUNO Tadashi
> Sent: Monday, June 23, 2008 11:24 AM
> To: [E-MAIL ADDRESS DELETED]
> Subject: [Seasar-user:14777] 
> Re:【SAStruts】Actionのプロパティへのインジェクションする対象の範囲を指定できないでしょうか。
> 
> いづのです。
> 
> スレッド分けた方がいいのかもしれませんが・・・
> 
> Bindingアノテーションでリクエストパラメータから設定されないようにはできたんですが、Actionのユニットテストを行う際に
> jdbcManagerがprivateになってしまったのでテストケースからアクセスできないようになってしまいました。
> リフレクション使って設定するようにしたんですが、なんかしっくりこないのでなにか良い方法はないものでしょうか。
> 
> テストケースの記述はhttp://ml.seasar.org/archives/seasar-user/2008-Febru
> ary/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みたいなリクエストを送ると、IllegalProperty
> RuntimeExceptionが起きてしまいます。
> >> インジェクションする対象の範囲を指定することはできないでしょうか。
> >> チュートリアルの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 mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
> 


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