2012-02-04 2 views
0

Я хотел бы добавить параметр lng ко всем ссылкам. Как я могу это сделать без использованияДобавьте параметр по умолчанию в <h: outputLink>, <h: commandLink> и т. Д.

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

в каждой ссылке? Значение lng находится в компоненте, включенном в сеанс.

Возможно, Filter может это сделать, но в этом случае, как я могу получить доступ к значению без инъекции?

+0

Зачем вам это нужно, если он уже включен в сеанс? Это для целей чистого SEO? – BalusC

+0

Точно, SEO Цель, наш отдел SEO должен иметь 'lng'on каждую ссылку на странице. – TinGinard

ответ

0

Так что просто посмотрев фильтр URLRewrite, я нашел решение.

Я кодирую фильтр, который переопределяет ответ, и метод encodeURL.

Метод doFilter, что обнаружить, если есть LNG пары по запросу и если не он получает значение LNG по умолчанию из фасоли в getDefaultLng методе:

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, что только добавляет пары.

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.