使用Struts2拦截器execAndWait后request,session为null的解决方法

1.execAndWait拦截器的配置方法

    在struts.xml中按照以下格式写

    <action name="..." class="...">
      <interceptor-ref name="defaultStack">

      </interceptor-ref>
      <interceptor-ref name="execAndWait">
      <param name="excludeMethods">input</param>
      <!-- 等待时间,执行时间没有超过此值,将不显示等待画面 (毫秒) -->
      <param name="delay">1000</param>
      <!-- 间隔检查时间,检查后台进程有没有执行完毕,如果完成了它就立刻返回,不用等到等待,用户不会看到等待画面  -->
      <param name="delaySleepInterval">50</param>
          <resultname="wait">wait.jsp</result>
      </interceptor-ref>
   </action>


2.request,session为null的解决方法

    因为这个action将会以单独的线程执行,所以你不能用ActionContext,因为它是ThreadLocal.这也就是说如果你要访问 session数据,你必须实现 SessionAware接口而不是调用ActionContext.getSesion() 。同理,要去到request要实现RequestAware接口。

public class SomeAction extends ActionSupport implements SessionAware, RequestAware{
    protected Map<String, Object> session;
     protected Map<String, Object> request;
      @Override
     public void setSession(Map<String, Object> session) {
         this.session = session;
     }
     
     @Override
     public void setRequest(Map<String, Object> request) {
         this.request = request;
     }

}

猜你喜欢

转载自yangyangmilan.iteye.com/blog/1102668