0

我正在使用 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 文件中的执行方法中的此代码

  SessionObject sess = (SessionObject)getSession().getAttribute(LcmsConstants.SESSION_OBJECT);

如果不使用拦截器,它会正确地提供会话。但是,如果使用拦截器代码,那么它会抛出 NULL 指针异常。

请告诉我如何克服这个问题..

4

2 回答 2

2

实现 SessionAware

http://struts.apache.org/2.0.6/struts2-core/apidocs/org/apache/struts2/interceptor/ExecuteAndWaitInterceptor.html

重要提示:因为操作将在单独的线程中运行,所以不能使用 ActionContext,因为它是 ThreadLocal。这意味着如果您需要访问例如会话数据,您需要实现 SessionAware 而不是调用 ActionContext.getSesion()。

于 2011-02-21T10:14:04.037 回答
0

mention in struts.xml as

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

it is working fine on my machine

于 2012-05-17T12:56:26.123 回答