我正在使用execAndWait拦截器,似乎拦截后会话丢失..
我的代码是 - struts-lcms.xml
...
<action name="testAction" class="com.lcms.presentation.TestAction">
<interceptor-ref name="execAndWait"></interceptor-ref>
<param name="delay">3000</param>
<param name="delaySleepInterval">50</param>
<result name="wait" type="tiles">tiles.ques</result>
<result name="success" type="tiles">tiles.ques</result>
<result name="diag" type="redirectAction">diagnosticAction</result>
</action>
...
如果我删除了拦截器代码,那么它会将我带到问题页面(tiles.ques)。但是,对于拦截器,会话为空...
此代码位于TestAction文件中的execute方法
SessionObject sess = (SessionObject)getSession().getAttribute(LcmsConstants.SESSION_OBJECT);
如果没有使用拦截器,它会正确地给出会话..但是,如果使用了拦截器代码,那么它会抛出NULL指针异常..
请告诉我如何解决这个问题..
答案 0 :(得分:2)
实现SessionAware
重要说明:由于操作将在单独的线程中运行,因此您无法使用ActionContext,因为它是ThreadLocal。这意味着如果您需要访问(例如)会话数据,则需要实现SessionAware而不是调用ActionContext.getSesion()。
答案 1 :(得分:0)
在struts.xml中提到
<interceptor-stack name="loadingStack">
<interceptor-ref name="completeStack" />
<interceptor-ref name="execAndWait">
<param name="delay">1000</param>
<param name="delaySleepInterval">500</param>
</interceptor-ref>
</interceptor-stack>
<interceptor-ref name="loadingStack"/>
<result name="wait">ETAX/TDS/wait.jsp</result>
它在我的机器上正常工作