oys*_*yse 10 java redirect utf-8 character-encoding jsf-2
我在JSF中有一个搜索表单,它使用RichFaces 4自动完成组件和以下JSF 2页面和Java bean实现.我使用Tomcat 6和7来运行应用程序.
...
<h:commandButton value="#{msg.search}" styleClass="search-btn" action="#{autoCompletBean.doSearch}" />
...
Run Code Online (Sandbox Code Playgroud)
在AutoCompleteBean中
public String doSearch() {
//some logic here
return "/path/to/page/with/multiple_results?query=" + searchQuery + "&faces-redirect=true";
}
Run Code Online (Sandbox Code Playgroud)
只要具有"searchQuery"字符串的所有内容都在Latin-1中,这种方法就可以正常工作,如果不在Latin-1中则不起作用.
例如,搜索"bodø"将自动编码为"bod%F8".但是,搜索"KraÐong"不起作用,因为它无法编码"Ð".
我现在尝试了几种不同的方法来解决这个问题,但它们都不起作用.
所以我的问题:
我认为你已经遇到了JSF中的一个案例错误.查询字符串是URL编码的,ExternalContext#encodeRedirectURL()
其使用由获得的响应字符编码ExternalContext#getResponseCharacterEncoding()
.然而,虽然JSF默认使用UTF-8作为响应的字符编码,这只是被设置如果视图实际上是要被渲染,而不是当该响应是被重定向的,所以响应的字符编码仍返回平台默认ISO-8859-1
其导致您的角色使用此错误编码进行URL编码.
我已将此报告为问题2440.同时,最好的办法是事先明确设置自己的响应字符编码.
FacesContext.getCurrentInstance().getExternalContext().setResponseCharacterEncoding("UTF-8");
Run Code Online (Sandbox Code Playgroud)
请注意,这仍然要求容器本身使用相同的字符编码来解码请求URL,因此您当然需要URIEncoding="UTF-8"
在Tomcat的配置中进行设置.这不会弄乱角色,因为它们现在真的是UTF-8.
归档时间: |
|
查看次数: |
5591 次 |
最近记录: |