0
我想將lng
參數添加到所有鏈接。我怎樣才能不用將缺省參數添加到<h:outputLink>,<h:commandLink>等
<f:param name="lng" ....
在每個鏈接? lng
的值在會話範圍的bean中。
也許Filter
可以做到這一點,但在這種情況下,我怎麼才能訪問沒有注入的價值?
我想將lng
參數添加到所有鏈接。我怎樣才能不用將缺省參數添加到<h:outputLink>,<h:commandLink>等
<f:param name="lng" ....
在每個鏈接? lng
的值在會話範圍的bean中。
也許Filter
可以做到這一點,但在這種情況下,我怎麼才能訪問沒有注入的價值?
所以只是看着URLRewrite過濾器我找到了解決方案。
我編寫了一個覆蓋響應的過濾器和encodeURL方法。
doFilter方法,檢測是否有對請求LNG PARAM,如果不是從bean獲得的getDefaultLng
方法默認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
,只是增加了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。
爲什麼你需要這個,如果它已經在會話scoped bean中了?這是純粹的SEO目的嗎? – BalusC 2012-02-04 20:59:48
確切地說,SEO目的,我們的SEO部門需要在頁面上的每個鏈接都有'lng'。 – TinGinard 2012-02-05 08:17:12