Кодировка символов не работает с компонентом PrimeFaces CellEditor - PullRequest
2 голосов
/ 09 декабря 2011

У меня возникли проблемы при редактировании таблицы с использованием <p:rowEditor>

Я использую encoding='windows-1252', чтобы иметь возможность использовать Шведские символы (å, ä, ö).Создание сущности работает нормально, но когда я редактирую ее в <p:dataTable> с использованием <p:cellEditor>, она фиксирует неожиданные символы.(Если я введу "åäö" и сохраню правку (используя p:celleditor), таблица в базе данных содержит "åäö").

Моя страница xhtml начинается следующим образом:

<?xml version='1.0' encoding='windows-1252' ?> 
<!DOCTYPE html>
<html...

Я пытался использовать фильтр кодировки символов:

public class CharacterEncodingFilter implements Filter {

    private static String ENCODING = "windows-1252";

    @Override
    public void destroy() {
    }

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

    @Override
    public void init(FilterConfig config) throws ServletException {
    }
}

Но безрезультатно.Есть идеи, почему редактирование постов incell с использованием другой кодировки символов?

Использование:

  • NetBeans 7.0.1
  • Glassfish 3.1
  • Primefaces 3.0.М4

1 Ответ

9 голосов
/ 10 декабря 2011

Если я введу «åäö» и сохраню правку (используя p: celleditor), таблица в базе данных будет содержать «Ã ¥ äö»

Это типичное представление CP1252 кодированных символов UTF-8.В UTF-8 эти символы представлены следующими байтами:

Если вы посмотрите эти шесть отдельных байтов в макете кодовой страницы CP1252 , вы увидите, что они представляют именно эти символы åäö.

JSF / Facelets по умолчаниюкодировке UTF-8, когда речь идет о генерации ответа HTML и обработке запросов POST.Этот атрибут XML encoding действительно ничего не меняет.Он просто сообщает анализатору XML, в какой кодировке символов вы написали / сохранили файл, чтобы он мог проанализировать его с правильной кодировкой символов.

Изменение кодировки символов ответа HTML и обработка запросов POSTэто можно сделать, установив атрибут encoding корневого тега представления <f:view>:

<f:view encoding="CP1252">

Но я категорически не рекомендую это.Таким образом, вы отступаете от универсальной кодировки символов, которая поддерживает более миллиона символов, до проприетарной кодировки символов, которая поддерживает не более 255 символов и понятна только для платформ Windows.Посетители веб-страниц, использующие Mac / Linux или любую другую операционную систему, не смогут правильно интерпретировать ответ HTML в этой кодировке символов и не смогут отправить данные обратно в эту кодировку символов.Ваше веб-приложение не будет готово к успешному мировому господству.

Вам нужно решить эту проблему по-другому.Очевидно, что ваша база данных должна быть изменена для поддержки UTF-8.Как именно это сделать, ответить невозможно, потому что вы ничего не сказали о марке / версии БД.Но изменение кодировки символов БД / таблицы должно зависеть от некоторых команд SQL.Или, если вы экспериментируете, просто обрезая БД и воссоздавая ее с правильной кодировкой.Подробнее см. Руководство по SQL для конкретных БД.

См. Также:

...