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) に移動します。ただし、インターセプターを使用すると、セッションは null になります。

TestAction ファイルの execute メソッドのこのコード

  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 であるため使用できません。つまり、セッション データなどにアクセスする必要がある場合は、ActionContext.getSesion() を呼び出すのではなく、SessionAware を実装する必要があります。

于 2011-02-21T10:14:04.037 に答える
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>

私のマシンでは問題なく動作しています

于 2012-05-17T12:56:26.123 に答える