我正在使用
构建Web应用程序我想在我的应用程序中添加国际化支持。我想使用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 **¤** , */
/* I want exactly same Japanese characters as entered by user */
}
我的应用程序中没有使用任何字符编码过滤器。
从jsp到控制器,它会自动转换为上面这样的数字.. 我想要与用户在jsp中输入完全相同的日文字符,并希望将其插入到数据库中并显示在页面上。
我将所有用户输入字段的值从JSP传递给控制器作为POJO。
请帮忙......
答案 0 :(得分:3)
最后,我成功地在基于Spring MVC的应用程序中实现了国际化支持....
我已按照以下步骤将国际化支持纳入我的Web应用程序,使用Spring MVC,Hibernate,MYSQL或Oracle Database和Jboss或webLogic作为应用程序服务器。
假设我们要为日语添加国际化支持。用户应该能够在网络表单中输入日文字符,并且应该以用户输入的格式保存,并且应该在网页上以相同的语言显示
按照以下步骤操作。
确保在操作系统中安装了日语支持(特定于区域的安装)。如果没有,请安装它。
如果您使用的是任何IDE,请通过将文本编码更改为UTF-8 来配置IDE以支持日语。例如,如果您使用的是Eclipse,则将文本文件编码更改为UTF-8。您可以通过此路径进行更改(Window-&gt; Preference-&gt; General-&gt; Workspace)
将Spring框架放在内置字符编码过滤器中作为过滤器链(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顶部添加下面提到的代码,将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。