2010-06-21 3 views
0

Я использую execAndWait перехватчик и кажется, что сессия теряется после перехватчика ..Проблема с execAndWait перехватчик SESSION потерял

мой код - распорки-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 указателя ..

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

ответ

2

реализует SessionAware

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

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

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> 

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