2010-11-20 15 views
0

Ich erstelle Web-App mit JSR286, Struts2 für Portlets auf WebSphere Portal 6.1.5 Das Problem ist, dass ich keine Arbeit in CookieInterceptor erstellen kann. Ich habe versucht, dies in src/struts.xml:Struts2-Portlet Lesen von Cookies mit 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> 

Und die Aktion:

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

Verfahren setCookiesMap wird nicht aufgerufen. Ich habe Firebug verwendet, ich sehe wirklich, dass der Request-Header mein "my-filter-cookie" enthält (gesetzt mit JQuery cookie plugin). WebDeveloper für Mozilla zeigt, dass der Browser ein solches Cookie hat und CURRENT_TIME + 1 Jahr abgelaufen ist.

Ich habe eine andere Konfiguration versucht. Ich habe Interceptor für die Aktion geschrieben:

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

Wieder fehl ...? Was mache ich falsch? Bitte vorschlagen.

Antwort

0

Sie sind:

  • ein Abfangjäger Definition namens "superInterceptor" (nicht sicher, wo das passt in)
  • einen Abfangjäger Stapel definieren "EKP-Cookie-Stack" genannt, die ausschließlich aus dem Cookie besteht Abfangjäger
  • "portletDefaultStack" als Standard-Abfangjäger Stapel deklarieren

da "portletDefaultStack" enthält nicht Ihre "EKP-Cookie-Stack", dann das Cookie intercepto r wird nicht aufgerufen. Im Grunde konfigurieren Sie einen Stapel und weisen dann Struts2 an, einen anderen Stapel zu verwenden.

Try this:

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

Sie können auch einen Haltepunkt in der CookieInterceptor ‚s intercept Methode zu setzen, um sicherzustellen, dass es richtig aufgerufen wird.

+0

Ich habe es gerade bekommen. Ich dachte, dass ** ** an den Stack angehängt würde, der als ** default-interceptor-ref ** definiert ist, aber das war mein Fehler. – Sergey

+0

Bekam seltsame Ausnahme in SystemOut.log: – Sergey

+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 Setzen des Ausdrucks 'my-filter-cookie' mit dem Wert 'SOME-VALUE-GOEs-HERE': (my- filter) - Cookie bei ognl.SimpleNode. setValueBody (SimpleNode.java:257) Warum oocurs? my-filter-cookie ist ein Cookie ... verstehe es nicht. Vielleicht ist das '-' Zeichen für OGNL verwirrend? – Sergey