1、增加拦截器
<interceptor-ref name="execAndWait">
<!--等待时间,执行时间没有超过此值,将不显示等待画面(毫秒)-->
<param name="delay">1000</param>
<!-- 间隔检查时间,检查后台进程有没有执行完毕,如果完成了它就立刻返回-->
<param name="delaySleepInterval">50</param>
</interceptor-ref>
此拦截器必须放在所有拦截器的最后。
2、增加result
<result name="wait">wait.jsp</result>
如果没有找到"wait"结果,struts2会自动生成一个wait结果(\org\apache\struts2\interceptor \wait.ftl).这个结果是用FreeMarker做的,所以需要Freemarker支持才能正常工作。如果你不想在程序中加入 FreeMarker,那就必须自己实现一个wait结果。这一般来说是有必要的,因为默认的wait页面很简单。
3、Action实现SessionAware接口
因为这个action将会以单独的线程执行,所以你不能用ActionContext,因为它是ThreadLocal.这也就是说如果你要访问 session数据,你必须实现 SessionAware结构而不是调用ActionContext.getSesion() 。
public interface SessionAware{
public void setSession(Map map);
}
public abstract class AbsBasicAction extends ActionSupport implements SessionAware{
/** 当前 Session */
protected Map session ;
public void setSession(Map session) {
this.session = session ;
}
}
4、实现 wait 结果 映射的 wait.jsp
必须设置该页面的meta信息,每隔5秒,重新请求一次前面的action。
<meta http-equiv="refresh" content="2;url=<s:url includeParams="all" />" />