2010-11-20 3 views
0

WebSphere Portal에서 포틀릿 용 JSR286, Struts2를 사용하여 웹 애플리케이션을 만들고 있습니다. 6.1.5 문제점은 CookieInterceptor에서 빌드 된 작업을 할 수 없다는 것입니다. 나는 SRC/struts.xml이 시도했습니다 :Struts2 포틀릿은 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> 

그리고 액션 : setCookiesMap가 호출되지 않습니다

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

방법. 필자는 firebug를 사용했습니다. 요청 헤더에 JQuery 쿠키 플러그인을 사용하여 설정 한 "my-filter-cookie"가 있습니다. Mozilla 용 WebDeveloper는 브라우저에 쿠키가 있음을 보여주고 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 - 쿠키 - 스택"라는 인터셉터 스택을 정의 (즉에 맞는 곳 확실하지) 기본 인터셉터 스택으로 "portletDefaultStack"를 선언 인터셉터

"portletDefaultStack은"당신 "EKP - 쿠키 - 스택"다음 쿠키 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

+0

SystemOut.log에 이상한 예외가 있습니다 : – Sergey

+0

[22.11.10 23 : 31 : 30 : 177 MSK] 0000006c SystemOut 11/22 23 : 31 : 30.176 [WARN] com.opensymphony.xwork2.util.logging.commons.CommonsLoggerOgnl ValueStack : 값이 'SOME-VALUE-GOEs-HERE'인 com.opensymphony.xwork2.util.logging.commons.CommonsLoggerError 식 'my-filter-cookie': (my- filter) - 쿠키 at ognl.SimpleNode. setValueBody (SimpleNode.java:257) 이유가 무엇입니까? my-filter-cookie는 쿠키입니다 ... 이해하지 못합니다. OGNL에 '-'기호가 혼동을 일으킬 수 있습니까? – Sergey