如何在SPRING MVC POJO领域持有日文字符

时间:2012-01-30 10:37:47

标签: spring-mvc internationalization pojo

我正在使用

构建Web应用程序
  1. Spring MVC
  2. Spring Security
  3. Hibenate
  4. MySQL的
  5. 我想在我的应用程序中添加国际化支持。我想使用Hibernate将日语字符存储和检索到mySQL数据库。

    我已将DB charset设置为 UTF-8 ,并且还将属性添加到 hibernate-cfg.xml

    property name =“hibernate.connection.characterEncoding”> UTF-8

    我已经完成了简单的POC,在java文件中,我能够用日语字符声明一些字符串变量,并且它们已成功插入到DB中,并且日语字符搜索也正常。

    但是当在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 个答案:

答案 0 :(得分:3)

最后,我成功地在基于Spring MVC的应用程序中实现了国际化支持....

我已按照以下步骤将国际化支持纳入我的Web应用程序,使用Spring MVC,Hibernate,MYSQL或Oracle Database和Jboss或webLogic作为应用程序服务器。

假设我们要为日语添加国际化支持。用户应该能够在网络表单中输入日文字符,并且应该以用户输入的格式保存,并且应该在网页上以相同的语言显示

按照以下步骤操作。

  1. 确保在操作系统中安装了日语支持(特定于区域的安装)。如果没有,请安装它。

  2. 如果您使用的是任何IDE,请通过将文本编码更改为UTF-8 来配置IDE以支持日语。例如,如果您使用的是Eclipse,则将文本文件编码更改为UTF-8。您可以通过此路径进行更改(Window-&gt; Preference-&gt; General-&gt; Workspace)

  3. 将Spring框架放在内置字符编码过滤器中作为过滤器链(web.xml)中的第一个过滤器,以确保它在请求处理期间首先运行并在响应处理期间最后运行

  4. 的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顶部添加下面提到的代码,将JSP页面编码设置为UTF-8。

    <%@ page language="java" pageEncoding="UTF-8" contentType="text/html;charset=UTF-8"%>

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    5通过向hibernate-cfg.xml添加以下属性,将Hibernate连接编码方案设置为UTF-8

    注意:如果使用JBoss应用服务器,请确保在数据库服务配置文件中将 characterEncoding = UTF-8 附加到connection-url (例如mySQL数据库的mysql-ds.xml ),如下所述。

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

答案 1 :(得分:1)

您需要使用字符编码过滤器。 Spring框架有一个内置的字符编码过滤器。 (见here) 只需将它放在您的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>

将此过滤器放在过滤器链的第一位,以确保它在请求处理期间首先运行,并在响应处理期间最后运行。

答案 2 :(得分:0)

您已经提到过,您没有使用任何字符过滤器。请尝试在web.xml中添加一个。据我所知,这是必须的,能够正确处理UTF-8。