我想将lng
参数添加到所有链接中。如何在不使用
<f:param name="lng" ....
在每个链接? lng
的值位于会话范围的bean中。
也许Filter
可以做到这一点,但在这种情况下如何在不注入的情况下访问该值?
答案 0 :(得分:0)
所以只需查看URLRewrite过滤器,就找到了解决方案。
我编写了一个覆盖响应的过滤器和encodeURL方法。
doFilter方法,用于检测请求中是否存在lng参数,如果不是,则在getDefaultLng
方法中从bean获取默认的lng值:
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。