2010-11-20 38 views
0

Je crée une application Web à l'aide de JSR286, Struts2 pour les portlets sur WebSphere Portal 6.1.5 Le problème est que je ne peux pas intégrer le travail dans CookieInterceptor. J'ai essayé cela en src/struts.xml:Portlet Struts2 lire les cookies à l'aide de 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> 

Et l'action:

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

La méthode setCookiesMap n'est pas invoqué. J'ai utilisé firebug, je vois vraiment, que l'en-tête de la requête contient mon "my-filter-cookie" (défini à l'aide du plugin cookie JQuery). WebDeveloper pour Mozilla montre que le navigateur a un tel cookie et il sera expiré CURRENT_TIME + 1 année.

J'ai essayé une autre configuration. J'ai écrit intercepteur pour l'action:

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

Encore une fois échouer ...? Qu'est-ce que je fais de mal? Veuillez suggérer.

Répondre

0

Vous êtes:

  • Définition d'un intercepteur appelé « superInterceptor » (pas sûr où cela cadre)
  • Définition d'une pile d'intercepteur appelé « EKP-cookie pile », qui se compose uniquement du cookie Interceptor
  • Déclarant "portletDefaultStack" comme pile intercepteurs par défaut

Depuis "portletDefaultStack" ne contient pas votre "EKP cookie-pile", puis le cookie intercepto r ne sera pas invoqué. Fondamentalement, vous configurez une pile et dites ensuite à Struts2 d'utiliser une pile différente.

Essayez ceci:

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

Vous pouvez également définir un point d'arrêt dans la méthode de interceptCookieInterceptor pour vous assurer qu'il est invoqué correctement.

+0

Je viens de l'avoir. Je pensais que ** ** serait ajouté à la pile définie comme ** default-interceptor-ref **, mais c'était mon erreur. – Sergey

+0

Exception étrange dans SystemOut.log: – Sergey

+0

[22.11.10 23: 31: 30: 177 MSK] 0000006c SystemOut O 11/22 23: 31: 30.176 [AVERTISSEMENT] com.opensymphony.xwork2.util.logging.commons.CommonsLoggerOgnl ValueStack: com.opensymphony.xwork2.util.logging.commons.CommonsLoggerError expression de définition 'my-filter-cookie' avec la valeur 'SOME-VALUE-GOES-HERE': (my-filter) - cookie à l'adresse ognl.SimpleNode. setValueBody (SimpleNode.java:257) Pourquoi ça marche? my-filter-cookie est un cookie ... Ne le comprends pas. Peut-être que le signe '-' est déroutant pour OGNL? – Sergey