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" />" />