2010-11-20 35 views
0

我正在使用JSR286,Struts2爲WebSphere Portal 6.1.5上的portlet創建web-app問題是我無法在CookieInterceptor中構建工作。 我在的src/struts.xml的嘗試這樣做:Struts2 portlet使用CookieInterceptor讀取Cookie

<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> 

再次失敗......?我做錯了什麼?請提出建議。

回答

0

您的位置:

  • 定義所謂的「superInterceptor」攔截器(不知道在哪裏,適合在)
  • 定義所謂的「EKP-餅乾棧」的攔截器棧,它僅僅存在的cookie攔截
  • 聲明 「portletDefaultStack」 作爲默認攔截器堆棧

由於 「portletDefaultStack」 不包含你的 「EKP-cookie的堆棧」,則該cookie 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 2010-11-20 18:56:26

+0

SystemOut.log中出現奇怪的異常: – Sergey 2010-11-22 20:37:30

+0

[22.11.10 23:31:30:177 MSK] 0000006c SystemOut O 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) 它爲什麼會出現? my-filter-cookie是一個cookie ...不理解它。也許' - '符號讓OGNL感到困惑? – Sergey 2010-11-22 20:39:51