2010-11-20 15 views
0

WebSphere Portal 6.1.5のJSR286、Struts2ポートレットを使用してWebアプリケーションを作成しています 問題はCookieInterceptorに組み込まれた作業をできないことです。 私はのsrc/struts.xmlでこれを試してみた:Struts2ポートレットがCookieInterceptorを使用してクッキーを読み取る

<package name="web-app-default" extends="struts-portlet-default , json-default" abstract="true"> 

    <interceptors> 
     <interceptor name="superInterceptor" class="ru.app.SuperInterceptor" />   
     <interceptor-stack name="ekp-cookie-stack"> 
      <interceptor-ref name="cookie"> 
        <param name="cookiesName">my-filter-cookie</param> 
       </interceptor-ref> 
     </interceptor-stack> 
    </interceptors> 



    <default-interceptor-ref name="portletDefaultStack" /> 

    <global-results> 
      <result name="error">/jsp/common/error.jsp</result> 
    </global-results> 
</package> 

とアクション:

public abstract class EventGeneralAction extends GeneralAction implements CookiesAware{ 
//some code... 

    /** {@link CookieInterceptor} should inject ekp-filter-cookie. */ 
     @SuppressWarnings("unchecked") 
     public void setCookiesMap(Map cookies){ 
      LOG.trace("#setCookiesMap -> cookies[{}]", cookies); 
      this.cookies = cookies; 
     } 
    } 

方法setCookiesMapが呼び出されていません。 Firebugを使用しましたが、リクエストヘッダーに「my-filter-cookie」が含まれています(JQuery Cookieプラグインを使用して設定されています)。 MozillaのWebDeveloperでは、ブラウザにこのようなCookieがあることが示され、CURRENT_TIME + 1年の期限が切れます。

別の設定を試しました。私はアクションのためのインターセプタを書いた:

<!-- Shows events on desired day of year. ShowDayEventsAction is a subclass of EventGeneralAction --> 
    <action name="main" class="ru.app.ShowDayEventsAction" > 
     <interceptor-ref name="cookie"> 
      <param name="cookiesName">my-filter-cookie</param> 
      </interceptor-ref> 
     <result>/jsp/event/view/day.jsp</result> 
    </action> 

再び失敗...?何が間違っていますか?提案してください。

答えて

0

あなたは、次のとおりです。単にクッキーの構成され、「EKP-クッキースタック」と呼ばれるインターセプタスタックを定義する「superInterceptor」(つまり内に収まる場所がわからない)

  • と呼ばれるインターセプタを定義

    • デフォルトのインターセプタスタックとして「portletDefaultStack」を宣言インターセプタ

    「portletDefaultStackは、」あなたの「EKP-クッキースタック」、そしてクッキーinterceptoが含まれていないので、 rは呼び出されません。基本的には、あるスタックを構成してから、別のスタックを使用するようにStruts2に指示します。

    これを試してみてください:

    <interceptor-stack name="portletDefaultStackWithCookie"> 
        <interceptor-ref name="portletState"/> 
        <interceptor-ref name="portletAware"/> 
        <interceptor-ref name="cookie"> 
         <param name="cookiesName">my-filter-cookie</param> 
        </interceptor-ref> 
        <interceptor-ref name="defaultStack"/> 
    </interceptor-stack> 
    
    <default-interceptor-ref name="portletDefaultStackWithCookie" /> 
    

    はまた、それが適切に呼び出されていることを確認するCookieInterceptorintercept方法でブレークポイントを設定することもできます。

  • +0

    私はちょうどそれを持っています。私は、** <インターセプター> **が** default-interceptor-ref **と定義されているスタックに追加されると思っていましたが、それは私の間違いでした。 – Sergey

    +0

    SystemOut.logに奇妙な例外があります: – Sergey

    +0

    [22.11.10 23:31:30:177 MSK] 0000006c SystemOut 11/22 23:31:30.176 [WARN] com.opensymphony.xwork2.util.logging.commons.CommonsLoggerOgnl ValueStack:com.opensymphony.xwork2.util.logging.commons.CommonsLoggerError値 'SOME-VALUE-GOEs-HERE'を持つ式 'my-filter-cookie'を設定します。(my-filter) - cookie at ognl.SimpleNode。 setValueBody(SimpleNode.java:257) なぜそれはoocursですか? my-filter-cookieはクッキーです...理解できません。たぶん ' - '記号がOGNLのために混乱しているのでしょうか? – Sergey

    関連する問題