[Seasar-user:9012] Re: [S2Struts]JSPからのコンポーネントの取得について

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2007年 7月 7日 (土) 18:52:39 JST


仙波と申します。

永島さん

ご返答ありがとうございます。

もう少し詳しい情報を記述すべきでした。申し訳ございません。

こちらで再度動作検証を行いました情報を記述します。

【概要】

サーブレットフィルターでExceptionをthrowし、
web.xmlのexception-typeに記述しているJSPへ遷移させる。
JSPで取得したい「Hoge」クラスはinstance="sessionで登録する。


【詳細】

(1)それぞれのファイルの記述は下記になります。

■dicon
  <component class="Hoge" instance="session"/>

■web.xml
  <exception-type>java.lang.Exception</exception-type>
    <location>/jsp/testError.jsp</location>
  </error-page>

■サーブレットフィルター
  public void doFilter(・・・) 
    throws IOException, ServletException {
    
    boolean isError = true;
    if (isError) {
      throw new RuntimeException("・・・");
    }

■JSP
  <% 
    S2Container container = 
      SingletonS2ContainerFactory.getContainer();
    try {
      Hoge hoge = (Hoge) container.getComponent(Hoge.class);
    } catch (Exception e) {
      e.printStackTrace();
    }
  %>


(2)実行結果

 (2−1)サーブレットフィルターでExceptionをthrowする場合。
 
  下記のメッセージが出力されます。

  org.seasar.framework.exception.EmptyRuntimeException:
   [ESSR0007]sessionはnullあるいは空であってはいけません
    at org.seasar.framework.container.deployer.
      SessionComponentDeployer.deploy(SessionComponentDeployer.java:44)
    at org.seasar.framework.container.impl.ComponentDefImpl.
      getComponent(ComponentDefImpl.java:94)
    at org.seasar.framework.container.impl.S2ContainerImpl.
      getComponent(S2ContainerImpl.java:128)

 (2−2)サーブレットフィルターでExceptionをthrowしない場合。
 
  JSPからコンポーネントを取得できます。


以上です。
よろしくお願いいたします。



"Katsuhiko Nagashima" <[E-MAIL ADDRESS DELETED]>さん:
2007/07/05 12:36:44
--
> 永島です。
> 
> > 2.取得する方法はあるでしょうか?
> > (なければ session.getAttribute で取得しようと思います)
> 
> JSPでも
> S2コンテナに登録したコンポーネントは
>  SingletonS2ContainerFactory
> を利用して
>  SingletonS2ContainerFactory.getContainer().getComponent(Hoge.class)
> のようにすれば取得できると思います。
> 
> インスタンスを生成した時点で結果的にsessionに格納されるとは思いますが、
> 直接session.getAttribute()で取得するのではなく、
> 上記のようにして取得したほうがよいと思います。
> 
> 
> 
> 07/07/03 に [E-MAIL ADDRESS DELETED]<[E-MAIL ADDRESS DELETED]> さ
んは書きました:
> > 仙波と申します。
> >
> > JSPからのコンポーネントの取得について質問があります。
> >
> > web.xml や struts-config.xml に定義したエラーページからは
> > S2コンテナに登録したコンポーネントを取得できないようです。
> >
> > ここでいうエラーページは下記のタグに記述しています。
> >
> > web.xml
> > <global-exceptions>
> >
> > struts-config.xml
> > <error-page>
> >
> >
> > コンポーネントはセッションに格納しています。
> >
> > <component class="HogeImpl" instance="session" />
> >
> >
> > 以下質問です。
> >
> > 1.上記現象は仕様でしょうか?
> >
> > 2.取得する方法はあるでしょうか?
> > (なければ session.getAttribute で取得しようと思います)
> >
> >
> > 使用しているバージョンは s2-struts-1.2.9.jar です。
> >
> >
> > 以上よろしくお願いいたします。
> >
> > _______________________________________________
> > Seasar-user mailing list
> > [E-MAIL ADDRESS DELETED]
> > https://ml.seasar.org/mailman/listinfo/seasar-user
> >
> 
> 
> -- 
> Katsuhiko Nagashima
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user




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