0

WebSphere Portal 6.1.5のポートレット用にJSR286、Struts2を使用してWebアプリを作成しています。問題は、CookieInterceptorでビルドされた作業を作成できないことです。私はこれをsrc/struts.xmlで試しました:

<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プラグインを使用して設定)。WebDeveloper for Mozillaは、ブラウザにそのような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>

再び失敗する...?私は何を間違えますか?提案してください。

4

1 に答える 1

0

あなたは:

  • 「superInterceptor」と呼ばれるインターセプターを定義する(それがどこに収まるかわからない)
  • 「ekp-cookie-stack」と呼ばれるインターセプタースタックの定義。これは、Cookieインターセプターのみで構成されます。
  • デフォルトのインターセプタースタックとして「portletDefaultStack」を宣言する

「portletDefaultStack」には「ekp-cookie-stack」が含まれていないため、Cookieインターセプターは呼び出されません。基本的に、1つのスタックを構成してから、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" />

CookieInterceptorのメソッドにブレークポイントを設定して、intercept正しく呼び出されていることを確認することもできます。

于 2010-11-20T18:54:20.630 に答える