Кодировка UTF-8 параметров GET в JSF

У меня есть форма поиска в JSF, которая реализована с использованием компонента автозаполнения RichFaces 4 и следующей страницы JSF 2 и Java-бина. Я использую 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 + "&amp;faces-redirect=true";

}

Это работает хорошо, пока все в строке "searchQuery" находится на латинице-1, это не работает, если она находится за пределами латиницы-1.

Например, поисковый запрос «bodø» будет автоматически закодирован как «bod%F8». Однако поиск «Kra Ðong» не будет работать, поскольку он не может кодировать «Ð».

Я испробовал несколько разных подходов к решению этой проблемы, но ни один из них не работает.

  • Я попытался кодировать searchQuery самостоятельно, используя URLEncode, но это приводит только к двойному кодированию, поскольку % кодируется как %25.
  • Я попытался использовать java.net.URI для получения кодировки, но результат тот же, что и в URLEncode.
  • Я пытался включить UTF-8 в Tomcat с помощью URIEncoding="UTF-8" в Connector, но это только усугубляет проблему, поскольку символы, отличные от ascii, вообще не работают.

Итак, на мои вопросы:

  1. Могу ли я изменить способ кодирования параметров GET в JSF 2?
  2. Если я не могу изменить способ кодирования параметров GET в JSF 2, могу ли я отключить кодирование и сделать это вручную?
  3. Я делаю что-то странное? Это похоже на то, что должно поддерживаться «из коробки», но я не могу найти других с такой же проблемой.
10
задан BalusC 12 June 2012 в 12:31
поделиться