Pergunta

Estou criando Web-App usando o JSR286, STRUTS2 para portlets no WebSphere Portal 6.1.5 O problema é que não posso fazer o trabalho incorporado no CookieInterceptor. Eu tentei isso em 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>

E a ação:

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

O método setcookiesmap não é invocado. Eu usei o Firebug, eu realmente vejo, esse cabeçalho de solicitação tem meu "meu filtro de filtro" (definido usando o plug-in JQuery Cookie). O WebDeveloper for Mozilla mostra que o navegador tem esse cookie e será expirado current_time+1 ano.

Eu tentei outra configuração. Eu escrevi Interceptor for 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>

Novamente falha ...? O que eu faço de errado? Por favor sugira.

Foi útil?

Solução

Tu es:

  • Definindo um interceptador chamado "SuperInterInterceptor" (não tenho certeza de onde isso se encaixa)
  • Definindo uma pilha interceptadora chamada "EKP-Cookie-Stack", que consiste apenas no interceptador de cookies
  • Declarando "PortletDefaultStack" como sua pilha de interceptores padrão

Como o "PortletDefaultStack" não contém seu "EKP-Cookie-Stack", o interceptor de cookies não será invocado. Basicamente, você está configurando uma pilha e depois dizendo ao Struts2 para usar uma pilha diferente.

Experimente isso:

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

Você também pode querer definir um ponto de interrupção no CookieInterceptor's intercept Método para garantir que esteja sendo chamado corretamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top