У меня есть форма поиска в 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", находится в латинском-1, оно не работает, если оно находится за пределами латинского-1.
Например, поиск "bodø" будет автоматически закодирован как "bod% F8". Однако поиск "KraJong" не будет работать, поскольку он не может кодировать "Ð".
Теперь я попробовал несколько разных подходов к решению этого вопроса, но ни один из них не работает.
- Я пробовал кодировать сам метод searchQuery, используя URLEncode, но это приводит только к двойному кодированию, поскольку% кодируется как% 25.
- Я попытался использовать java.net.URI для получения кодировки, но дает тот же результат, что и URLEncode.
- Я попытался включить UTF-8 в Tomcat, используя URIEncoding = "UTF-8" в коннекторе, но это только ухудшает эту проблему, так как символы не-ascii не работают вообще.
Так на мои вопросы:
- Могу ли я изменить способ, которым JSF 2 кодирует параметры GET?
- Если я не могу изменить способ, которым JSF 2 кодирует параметры GET, могу ли я включить кодировку и сделать это вручную?
- Я делаю что-то там, где здесь странно? Это похоже на то, что должно поддерживаться из коробки, но я не могу найти других с той же проблемой.