Как держать японские символы в поле SPRING MVC POJO - PullRequest
1 голос
/ 30 января 2012

Я создаю веб-приложение, используя

  1. Spring MVC
  2. Spring Security
  3. Hibenate
  4. MySQl

Я хочу добавить поддержку интернационализации в мое приложение. Например, я хочу сохранять и извлекать японские символы в базу данных MySQL с помощью Hibernate.

Я установил кодировку БД в UTF-8 , а также добавилсвойство hibernate-cfg.xml

имя свойства = "hibernate.connection.characterEncoding"> UTF-8

Я сделал простой POCв котором из файла Java я могу объявить некоторую строковую переменную с японскими символами, и они успешно вставлены в БД, и поиск по японским символам также работает нормально.

Но когда в файле JSP я заполняю формувсе значения поля передаются в контроллер в виде POJO, а все символы японского языка в поле POJO автоматически конвертируются в числовые ссылки на символы, как указано в примере ниже,

CreateUser.jsp

<form:form method="post" commandName="userModel">
    <%@include file="/tp/web/iBusinessException.jsp"%>
    <table width="700" border="0" align="center" cellpadding="4"
        cellspacing="0">
        <tr>
            <td class="tdWscHeading">
                <img
                    src="<%=request.getContextPath()%>/tp/web/console/include/images/iconCreateuser.gif"
                    alt="Task Summary" width="20" height="20" align="absmiddle">
                <spring:message code='label.createuser'></spring:message>
            </td>
        </tr>
    </table>
    <table width="700" border="0" align="center" cellpadding="4"
        cellspacing="1" class="tableWscmain">
        <tr>
            <td width="250" class="tdWscContent fontBold">
                <spring:message code='label.firstname'></spring:message>
                <span class="fontRed"> *</span>
            </td>
            <td class="tdWscContent">
                <form:input path="firstname" cssClass="formINPUT"
                    autocomplete="off" />
                <!-- Error Message if Key is Empty Starts -->

                <span class="error"> <spring:bind path="firstname">
                        <c:if test="${not empty status.errorMessage}">
                            <c:out value="${status.errorMessage}" escapeXml="false" />
                        </c:if>
                    </spring:bind> </span>
                <!-- Error Message if key is Empty Ends -->
            </td>
        </tr>
        <tr>
            <td class="tdWscContent fontBold">
                <spring:message code='label.lastname'></spring:message>
                <span class="fontRed"> *</span>
            </td>
            <td class="tdWscContent">
                <form:input path="lastname" cssClass="formINPUT"
                    autocomplete="off" />
                <!-- Error Message if Key is Empty Starts -->
                <span class="error"> <spring:bind path="lastname">
                        <c:if test="${not empty status.errorMessage}">
                            <c:out value="${status.errorMessage}" escapeXml="false" />
                        </c:if>
                    </spring:bind> </span>
                <!-- Error Message if key is Empty Ends -->
            </td>
        </tr>
        <tr>
            <td class="tdWscContent fontBold">
                <spring:message code='label.username'></spring:message>
                <span class="fontRed"> *</span>
            </td>
            <td class="tdWscContent">
                <form:input path="username" cssClass="formINPUT"
                    autocomplete="off" />
                <!-- Error Message if Key is Empty Starts -->
                <span class="error"> <spring:bind path="username">
                        <c:if test="${not empty status.errorMessage}">
                            <c:out value="${status.errorMessage}" escapeXml="false" />
                        </c:if>
                    </spring:bind> </span>


                <!-- Error Message if key is Empty Ends -->
            </td>
        </tr>
        <tr>
            <td class="tdWscContent fontBold">
                <spring:message code='label.password'></spring:message>
                <span class="fontRed"> *</span>
            </td>
            <td class="tdWscContent">
                <form:password path="password" cssClass="formINPUT"
                    autocomplete="off" showPassword="false" />
                <!-- Error Message if Key is Empty Starts -->
                <span class="error"> <spring:bind path="password">
                        <c:if test="${not empty status.errorMessage}">
                            <c:out value="${status.errorMessage}" escapeXml="false" />
                        </c:if>
                    </spring:bind> </span>
                <!-- Error Message if key is Empty Ends -->
            </td>
        </tr>
        <tr>
            <td class="tdWscContent fontBold">
                <spring:message code='label.email'></spring:message>
                <span class="fontRed"> *</span>
            </td>
            <td class="tdWscContent">
                <form:input path="email" cssClass="formINPUT"
                    autocomplete="off" />
                <!-- Error Message if Key is Empty Starts -->
                <span class="error"> <spring:bind path="email">
                        <c:if test="${not empty status.errorMessage}">
                            <c:out value="${status.errorMessage}" escapeXml="false" />
                        </c:if>
                    </spring:bind> </span>
                <!-- Error Message if key is Empty Ends -->
            </td>
        </tr>

        <tr>
            <td class="tdWscContent fontBold">
                <spring:message code='label.groupname'></spring:message>
                <span class="fontRed"> *</span>
            </td>
            <td class="tdWscContent">
                <select id="groupname" name="groupname">
                    <c:forEach items="${GROUPS_LIST_RESULT}" var="option">
                        <option value='<c:out value="${option.groupname}" />'>
                            <c:out value="${option.groupname}" />
                        </option>
                    </c:forEach>
                </select>
                <!-- Error Message if Key is Empty Starts -->
                <span class="error"> <form:errors path="groupname"></form:errors>
                </span>
                <!-- Error Message if key is Empty Ends -->
            </td>
        </tr>

        <tr align="center">
            <td colspan="2" class="tdWscContent fontBold">
                <input type="submit" name=""
                    value="<spring:message code="label.createuser"></spring:message>">
            </td>
        </tr>
    </table>
</form:form>

MyController

@RequestMapping(value = USERADMINISTRATION_NAMESPACE + "/createUser.do", method = RequestMethod.POST)
public ModelAndView submitCreateUserPage(
        @ModelAttribute("userModel") User user, BindingResult result

) throws UserAlreadyExistsException {
    String password = "";
    password = user.getPassword();

/* Here , password i am getting like **&#164;** ,  */
/* I want exactly same Japanese characters as entered by user */
}

В моем приложении не используется фильтр кодировки символов.

Из jspв контроллер, он автоматически преобразуется в указанное выше число. Я хочу точно такие же японские символы, которые введены пользователем в jsp, и хочу вставить их в БД и отобразить на странице.

Я передаю все поля ввода пользователязначение из JSP в контроллер как POJO.

Пожалуйста, помогите ...

Ответы [ 3 ]

3 голосов
/ 01 февраля 2012

Наконец-то мне удалось реализовать поддержку интернационализации в моем приложении на основе Spring MVC ....

Следуя приведенным ниже инструкциям, я включил поддержку интернационализации в мое веб-приложение, используя Spring MVC, Hibernate, MYSQL или Oracle Database и Jboss или webLogic в качестве сервера приложений.

Допустим, мы хотим добавить поддержку интернационализации для японского языка. Т.е. пользователь должен иметь возможность вводить японские символы в веб-формах, и он должен быть сохранен в том же формате, в котором он был введен пользователем, а также должен отображаться на том же языке на веб-странице. .

Выполните следующие шаги.

  1. Убедитесь, что в операционной системе установлена ​​поддержка японского языка (установка для конкретного региона). Если нет, пожалуйста, установите его.

  2. Если вы используете какую-либо IDE, настройте IDE для поддержки японского языка, изменив кодировку текста на UTF-8 . Например, если вы используете мой Eclipse, измените кодировку текстового файла на UTF-8. Вы можете изменить этот путь (Window-> Preference-> General-> Workspace)

  3. Поместите встроенный фильтр Spring Framework в кодировку символов в качестве первого фильтра в цепочке фильтров (web.xml), чтобы убедиться, что он запускается первым во время обработки запроса и выполняется последним во время обработки ответа

web.xml

<filter>  
    <filter-name>encodingFilter</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>
    <!-- set forceEncoding to true if you want to override encoding of servlet -->
    <param-name>forceEncoding</param-name>
    <param-value>true</param-value> 
</init-param>

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

4 Установите кодировку страницы JSP в UTF-8, добавив нижеупомянутый код в верхней части JSP.

<%@ page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%></p> <pre><code><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

5 Установите схему кодирования соединения Hibernate на UTF-8, добавив следующее свойство в hibernate-cfg.xml

<property name="hibernate.connection.characterEncoding">UTF-8</property>

Примечание. При использовании сервера приложений JBoss убедитесь, что вы добавили characterEncoding = UTF-8 к URL-адресу соединения в файле конфигурации службы базы данных. ( Например, mysql-ds.xml для базы данных mySQL ), как указано ниже.

<datasources>

<local-tx-datasource>

    <jndi-name>WSCDS</jndi-name>

   <connection-url>
   jdbc:mysql://{ipaddress}:{port}/{database_name}?characterEncoding=UTF-8
   </connection-url>

<driver-class>com.mysql.jdbc.Driver</driver-class>

<user-name>{username}</user-name>

<password>{password}</password>  

<metadata>

   <type-mapping>mySQL</type-mapping>

</metadata>
1 голос
/ 31 января 2012

Вам необходимо использовать фильтр кодировки символов.Spring Framework имеет встроенный фильтр кодировки символов.(см. здесь ) Просто поместите его в ваш web.xml:

<filter>
    <filter-name>encodingFilter</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>
        <!-- set forceEncoding to true if you want to override encoding of servlet -->
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value> 
    </init-param>
</filter>

Поместите этот фильтр на первое место в цепочке фильтров, чтобы убедиться, что он запускается первым во время обработки запроса и выполняется последнимво время обработки ответа.

0 голосов
/ 30 января 2012

Вы упомянули, что вы не используете какой-либо символьный фильтр.Пожалуйста, попробуйте добавить один в web.xml.Насколько я знаю, это необходимо для правильной работы с UTF-8.

...