Проблема с перехватчиком execAndWait, СЕССИЯ потеряна - PullRequest
0 голосов
/ 21 июня 2010

Я использую перехватчик 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>

...

Если я удаляю код перехватчика, он переносит меня на страницу вопроса (tile.ques) .. Однако с перехватчиком сеанс становится пустым ..

Этот код в методе execute в файле TestAction

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

правильно выдает сеанс, если перехватчик не используется ... однако, если используется код перехватчика, он вызывает исключение NULL-указателя ..

Скажите, пожалуйста, как преодолеть эту проблему ..

Ответы [ 2 ]

2 голосов
/ 21 февраля 2011

реализует SessionAware

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

Важное замечание: Поскольку действие будет выполняться в отдельном потоке, вы не можете использовать ActionContext, потому что это ThreadLocal. Это означает, что если вам нужен доступ, например, к данным сеанса, вам нужно реализовать SessionAware, а не вызывать ActionContext.getSesion ().

0 голосов
/ 17 мая 2012

упоминание в 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>

на моей машине работает нормально

...