Передача строки UTF-8 в f: viewParam в JSF - PullRequest
1 голос
/ 15 февраля 2012

Я попытался передать строку UTF-8 как значение f:viewParam, но значение показано как строка мусора, я добавил EncodingFilter в web.xml для настройки UTF-8 для запроса и ответа, как показано ниже

HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");

и я определил лицевую страницу в этом стиле, но проблема не решена

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:f="http://java.sun.com/jsf/core"
      xmlns:h="http://java.sun.com/jsf/html">
<f:metadata>
    <f:viewParam name="q" value="#{searchBean.query}"/>
</f:metadata>
.....
</html>

Я проверяю это с Myfaces 2.0.5 и Mojarra 2.0.5

1 Ответ

2 голосов
/ 15 февраля 2012

Очевидно, вы используете конфигурацию сервера, которая интерпретирует строки запроса GET, используя другую кодировку символов по умолчанию. Например, Tomcat по умолчанию интерпретирует их как ISO-8859-1. Вам нужно открыть Tomcat /conf/server.xml и добавить атрибут URIEncoding к элементу <Connector> со значением UTF-8.

<Connector ... URIEncoding="UTF-8">

Этот фильтр, кстати, совершенно не нужен. Убери это. JSF 2.x на Facelets по умолчанию использует UTF-8 на всех уровнях. Кроме того, HttpServletRequest#setCharacterEncoding() не влияет на запросы GET, он влияет только на запросы POST.

Смотри также:

...