2012-02-04 2 views
0

모든 링크에 lng 매개 변수를 추가하고 싶습니다. 사용하지 않고 어떻게 할 수 있습니까?기본 매개 변수를 <h : outputLink>, <h : commandLink> 등에 추가하십시오.

<f:param name="lng" .... 

모든 링크에서? lng 값은 세션 | 위 빈에 있습니다.

어쩌면 Filter이 가능하지만이 경우 어떻게 주입없이 값에 액세스 할 수 있습니까?

+0

세션 범위 Bean에 이미있는 경우 왜 이것을 사용해야합니까? 그것은 순수한 SEO 목적인가요? – BalusC

+0

정확하게, SEO 목적, 우리 SEO 부서는 페이지의 모든 링크에 'lng'이 있어야합니다. – TinGinard

답변

0

그래서 URLRewrite 필터를 보면 해결책을 찾았습니다.

응답을 무시하는 필터와 encodeURL 메서드를 코딩합니다.

요청에 LNG의 PARAM가있는 경우 감지가 getDefaultLng 방법에 빈에서 기본 LNG 값을 얻을 수없는 경우, doFilter 방법에있어서,

public void doFilter(ServletRequest request, ServletResponse response, 
     FilterChain chain) throws IOException, ServletException { 
    final HttpServletRequest hsRequest = (HttpServletRequest) request; 
    final HttpServletResponse hsResponse = (HttpServletResponse) response; 
    if (hsRequest.getParameter("lng")!=null){ 
     lng = hsRequest.getParameter("lng"); 
    } else { 
     lng = getDefaultlng(hsRequest, hsResponse); 
    } 
    LngResponse lngResponse = new LngResponse(hsResponse,lng); 
    chain.doFilter(hsRequest, lngResponse); 
} 

LngResponse#encodeURL 단지 추가하는 param.

public String encodeURL(String s) { 
    s = parseUrl(s); 
    return super.encodeURL(s); 
} 

private String parseUrl(String s){ 
    if (s.indexOf("lng=")==-1){ 
     if (s.indexOf("?")>-1){ 
      s = s+"&lng="+this.lng; 
     } else { 
      s = s+"?lng="+this.lng; 
     } 
    } 
    return s; 
} 

마지막으로 작동하므로 SEO 부서의 고유 URI가 있습니다.

관련 문제