我在 JSF 中有一个搜索表单,它是使用 RichFaces 4 自动完成组件和以下 JSF 2 页面和 Java bean 实现的。我使用 Tomcat 6 和 7 来运行应用程序。
...
<h:commandButton value="#{msg.search}" styleClass="search-btn" action="#{autoCompletBean.doSearch}" />
...
在 AutoCompleteBean 中
public String doSearch() {
//some logic here
return "/path/to/page/with/multiple_results?query=" + searchQuery + "&faces-redirect=true";
}
只要带有“searchQuery”字符串的所有内容都在 Latin-1 中,它就可以很好地工作,如果在 Latin-1 之外,它就不起作用。
例如,搜索“bodø”将自动编码为“bod%F8”。然而,搜索“Kra Ðong”将不起作用,因为它无法编码“Д。
我现在尝试了几种不同的方法来解决这个问题,但它们都不起作用。
- 我尝试使用 URLEncode 对我自己的 searchQuery 进行编码,但这只会导致双重编码,因为 % 被编码为 %25。
- 我尝试使用 java.net.URI 来获取编码,但给出的结果与 URLEncode 相同。
- 我曾尝试在连接器中使用 URIEncoding="UTF-8" 在 Tomcat 中打开 UTF-8,但这只会加剧该问题,因为那时非 ascii 字符根本不起作用。
所以我的问题:
- 我可以更改 JSF 2 编码 GET 参数的方式吗?
- 如果我无法更改 JSF 2 编码 GET 参数的方式,我可以关闭编码并手动进行吗?
- 我在这里做什么奇怪的事情吗?这似乎应该支持开箱即用,但我找不到任何其他有同样问题的人。