Подача формы UTF-8 в JSF искажает данные

В одном из проектов у меня есть неанглоязычный контент (финский), доступный по данным формы. Мы используем JSF 2.0 с PrimeFaces. У меня возникают проблемы при отправке данных на сервер. Данные становятся поврежденными, когда я отправляю форму. Только финские персонажи становятся коррумпированными.

Кто-нибудь уже столкнулся с этой проблемой и нашел решение?

Ответ 1

Это известная проблема, так как PrimeFaces 3.0. Это вызвано изменением того, как он проверяет, является ли текущий HTTP-запрос ajax-запросом. Он был идентифицирован параметром запроса вместо заголовка запроса. Когда параметр запроса извлекается в первый раз перед восстановлением представления JSF, все параметры запроса будут обрабатываться с использованием кодировки символов по умолчанию сервера, которая часто является ISO-8859-1, а не собственной кодировкой JSF по умолчанию UTF-8. Подробное объяснение см. В Unicode-вход, полученный через входные компоненты PrimeFaces, поврежден.

Одним из решений является создание фильтра, который выполняет request.setCharacterEncoding("UTF-8").

@WebFilter("*.xhtml")
public class CharacterEncodingFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        chain.doFilter(request, response);
    }

    // ...
}