[Seasar-user:17987] Re: [SAStruts] IntegerceptorのHttpServletRequestの取得

原 宏和 [E-MAIL ADDRESS DELETED]
2009年 7月 13日 (月) 20:19:26 JST


原です。

> > Interceptorを実装してHttpServletRequestの内容からDBにログを取得したり
> > 例外発生時にInterceptorしてHttpServletRequest内容と例外内容をメール
> > 送信したりしようとしているのですが、HttpServletRequestがNULLに
> > なってしまってうまくいきません。
> > MLの過去ログやネットでいろいろ見たんですが、うまくいきませんでした。
> 
> どううまくいかなかったのでしょうか?
HttpServletRequestがNULLになるということです。
今またいろいろ変えてデバッグしていると、このInterceptorを2度通っているみたいで
一度目はNULLで2度目は値が入っていました。

@Aspect("myThrowableInterceptor")
public class IndexAction extends BaseForm {
	@Resource	protected HttpServletRequest request;
	@Resource	protected ServletContext     context;

	@Resource	protected TNumService tNumService;
	@Resource	protected TLogService tlogService;

	@Execute(validator = false)
	@Aspect("loggerInterceptor")
	public String index() throws Exception {
		//ここに処理を記述
		int i=Integer.valueOf("S");
		return "index.jsp";
	}

public class MyThrowableInterceptor extends ThrowsInterceptor {
	/** シリアルバージョン. */
	private static final long serialVersionUID = 5306143265122341227L;
	@Resource private  HttpServletRequest request;
	public final Object handleThrowable(final Exception e, final MethodInvocation invocation) throws Throwable {
		//HttpServletRequest request = getRequestFromContainer();
		if (request == null) {
			e.printStackTrace();
		} else {
			Utils.procException(request, e);

			return "/error.jsp";
		}
		return invocation.proceed();
	}

> > ネットは↓のページを見ました
> > http://www.seasar.org/wiki/index.php?FAQ%2FS2AOP#q69751d4
> > 
> > で、結局過去のMLに載っていた方法でうまくいきましたが、
> > 実際どのように実装するのが理想なのでしょうか?
> 
> 「理想」というのはないと思いますが,Seasar2.4 では
> FAQ の最後に書いてある方法が使われることが多いと
> 思います.
customizerには以下のように記述しました。
<components>
  <include path="default-customizer.dicon"/>
  <component name="formCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain"/>
  <component name="actionCustomizer" class="org.seasar.framework.container.customizer.CustomizerChain">

    <initMethod name="addCustomizer">
      <arg>
        <component class="org.seasar.framework.container.customizer.AspectCustomizer">
          <property name="useLookupAdapter">true</property>
          <property name="interceptorName">"myThrowableInterceptor"</property>
        </component>
      </arg>
    </initMethod>

-- 
原 宏和 <[E-MAIL ADDRESS DELETED]>



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