Вопрос по character-encoding, jsf-2, primefaces – Отправка формы UTF-8 в JSF приводит к повреждению данных [дубликат]

11

This ques#ion already has an answer here:

Unicode inpu# re#rieved via PrimeFaces inpu# componen#s become corrup#ed 1 answer

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

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

Вы загружаете файл во время отправки? Я разрабатываю приложения на чешском языке, и это случилось со мной с помощью компонента загрузки файлов IceFaces. Но в обычных случаях все было хорошо. Вы можете использовать фильтр для установки финской кодировки, но это все еще странная ошибка Petr Mensik

Ваш Ответ

1   ответ
20

м способа проверки того, является ли текущий 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);
    }

    // ...
}
Это сработало для меня со следующей аннотацией: @WebFilter (filterName = & quot; CharacterEncodingFilter & quot ;, urlPatterns = {& quot; / * & quot;}) Спасибо
@ Kia: по-видимому, вашFacesServlet не отображается на*.xhtml, но на что-то еще, такие как/faces/* или же*.jsf, Затем вы должны изменить шаблон URL фильтра таким же образом./* будет действительно соответствоватьevery single HTTP-запрос. Кстати, просто@WebFilter("/*") было также достаточно.

Похожие вопросы