1、增加攔截器
<interceptor-ref name="execAndWait">
<!--等待時(shí)間,執(zhí)行時(shí)間沒(méi)有超過(guò)此值,將不顯示等待畫面(毫秒)-->
<param name="delay">1000</param>
<!-- 間隔檢查時(shí)間,檢查后臺(tái)進(jìn)程有沒(méi)有執(zhí)行完畢,如果完成了它就立刻返回-->
<param name="delaySleepInterval">50</param>
</interceptor-ref>
此攔截器必須放在所有攔截器的最后。
2、增加result
<result name="wait">wait.jsp</result>
如果沒(méi)有找到"wait"結(jié)果,struts2會(huì)自動(dòng)生成一個(gè)wait結(jié)果(\org\apache\struts2\interceptor
\wait.ftl).這個(gè)結(jié)果是用FreeMarker做的,所以需要Freemarker支持才能正常工作。如果你不想在程序中加入
FreeMarker,那就必須自己實(shí)現(xiàn)一個(gè)wait結(jié)果。這一般來(lái)說(shuō)是有必要的,因?yàn)槟J(rèn)的wait頁(yè)面很簡(jiǎn)單。
3、Action實(shí)現(xiàn)SessionAware接口
因?yàn)檫@個(gè)action將會(huì)以單獨(dú)的線程執(zhí)行,所以你不能用ActionContext,因?yàn)樗荰hreadLocal.這也就是說(shuō)如果你要訪問(wèn)
session數(shù)據(jù),你必須實(shí)現(xiàn) SessionAware結(jié)構(gòu)而不是調(diào)用ActionContext.getSesion() 。
public interface SessionAware{
public void setSession(Map map);
}
public abstract class AbsBasicAction extends ActionSupport implements SessionAware{
/** 當(dāng)前 Session */
protected Map session ;
public void setSession(Map session) {
this.session = session ;
}
}
4、實(shí)現(xiàn) wait 結(jié)果 映射的 wait.jsp
必須設(shè)置該頁(yè)面的meta信息,每隔5秒,重新請(qǐng)求一次前面的action。
<meta http-equiv="refresh" content="2;url=<s:url includeParams="all" />" />