使用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;
???? }
}
?
?
?