Struts 2 - execAndWait

时间:2013-06-20 15:28:16

标签: struts2 interceptor

我有一个Struts2应用程序,其运行时间可能在1秒到5分钟之间。所以,如果动作运行时间超过20秒,我正在使用execAndWait拦截器来显示等待页面。操作的设置如下所示:

<action name="myAction" class="myActionClass">
    <interceptor-ref name="defaultStack" />
    <interceptor-ref name="execAndWait">
       <param name="delay">20000</param>
    </interceptor-ref>
    <result name="success">myPage.jsp</result>

    <result name="wait">waitPage.jsp</result>
</action>

我已经测试过这种情况,操作只需要1秒钟就可以运行。我希望永远不会显示等待页面。

然而,等待页面仍然显示出来。我尝试调试我的动作类和方法,发现执行挂起在下面的语句中

中指定的时间
<param name="delay">

在这种情况下,它在下面的语句中等待20秒,然后成功完成执行。

getSession().put(A_SESSION_VARIABLE, 10);

注意:MyActionClass确实实现了SessionAware

还有其他人遇到过这个问题吗?有解决方法吗?

2 个答案:

答案 0 :(得分:2)

解决方法(如果您的操作在servlet环境中使用):实现ServletRequestAware接口并使用HttpServletRequest来获取会话。

request.getSession().setAttribute(A_SESSION_VARIABLE, 10);

答案 1 :(得分:0)

对于这个问题我有不同的方法。您可以在单独的线程中运行繁重的处理,并立即将响应返回给用户,说明工作正在进行中。工作完成后,您可以返回任何想要返回给用户的内容。这可以通过使用轮询来实现。

在此期间,用户不必等待,也可以做其他事情。

希望它有所帮助。