Форма Spring и контроллер UTF-8 с плохой кодировкой

У меня проблема с кодировкой UTF-8. Мой веб-приложение использует французские слова, которые правильно отображаются в моем JSP, но не в моем контроллере после POST. Например, в моем JSP у меня есть:

Prénom de mon père

и когда я отправляю форму, контроллер получает:

Préno de mon père

CharacterEncodingFilter - первый фильтр в файле, как описано в этом посте.

Вот мой JSP:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!doctype html>
<%@ taglib uri="http://tiles.apache.org/tags-tiles"         prefix="tiles" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core"          prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form"   prefix="form" %>

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta http-equiv="content-language" content="fr">
    ...
    </head>

    <form:form class="form-horizontal" modelAttribute="AlimentationForm"
    action="${actionUrl}" method="POST">
    ...
         <form:input path="questions" class='input-xlarge' type='text' value='Prénom de mon père'/>
    </form>

Мой web.xml:

<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/web/*</url-pattern>
</filter-mapping>

И мое приложение-config.xml

<beans:bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
    <beans:property name="basename">
        <beans:value>classpath:messages</beans:value>
    </beans:property>
    <beans:property name="defaultEncoding" value="UTF-8" />
</beans:bean>

Я не знаю, что не так в моем приложении или моей конфигурации, у вас есть идеи?

Заранее спасибо.

РЕДАКТИРОВАТЬ: я использую HDIV Framework

2 ответа

Решение

Эта проблема на самом деле пришла из HDIV Framework версии 2.1.2. Патч доступен здесь, если вы не можете использовать следующий выпуск.

Надеюсь, это кому-нибудь поможет.

Убедитесь, что страница JSP правильно кодирует данные, отправленные на сервер. Попробуйте добавить

<%@page pageEncoding="UTF-8" %>

в начало вашего JSP, так как это гарантирует, что любые данные, отправленные по http, будут правильно кодироваться.

Я полагаю, что кодировка http по умолчанию - ISO-8859-1.

Другие вопросы по тегам