为 <h:outputLink>、<h:commandLink> 等添加默认参数
Posted
技术标签:
【中文标题】为 <h:outputLink>、<h:commandLink> 等添加默认参数【英文标题】:Add default parameter to <h:outputLink>, <h:commandLink> and so on 【发布时间】:2012-02-26 23:14:39 【问题描述】:我想将lng
参数添加到所有链接。我怎么能不使用
<f:param name="lng" ....
在每个链接中? lng
的值在会话范围的 bean 中。
也许Filter
可以做到这一点,但在这种情况下,我如何在不注入的情况下访问该值?
【问题讨论】:
如果它已经在会话范围的 bean 中,为什么还需要它?是为了纯粹的 SEO 目的吗? 没错,搜索引擎优化的目的,我们的搜索引擎优化部门需要在页面上的每个链接上都有lng
。
【参考方案1】:
所以只要查看 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。
【讨论】:
以上是关于为 <h:outputLink>、<h:commandLink> 等添加默认参数的主要内容,如果未能解决你的问题,请参考以下文章