描述:实现用户注册功能,进行简单的数据验证及其国际化提示错误..
一、国际化设置
<!-- 设置国际化属性文件及其默认编码
注意:未设置p:defaultEncoding="UTF-8"前页面出现过乱码
-->
<bean id="messageSource"
class="org.springframework.context.support.ReloadableResourceBundleMessageSource"
p:basenames="/WEB-INF/messages/messages" p:defaultEncoding="UTF-8"
p:cacheSeconds="0" />
<!--
设置国际化修改拦截器
-->
<bean id="localeChangeInterceptor"
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
<property name="paramName" value="locale" />
</bean>
<!--
这个本地化解析器检查客户端中的Cookie是否包含本地化信息。 如果有的话,就使用。
当配置这个解析器的时候,可以指定cookie名,以及cookie的最长生存期(Max Age)
-->
<bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver" />
二、控制器(Controller)和验证器(Validator)
Controller:
@RequestMapping(method = RequestMethod.POST)
public String userRegister(UserBean userBean, BindingResult result, Model model) {
//参照petclinic代码验证
new UserBeanValidator().validate(userBean, result);
if (result.hasErrors()) {
model.addAttribute("userBean", userBean);
return "register";
}
this.userService.addUser(userBean);
return "registerSuccessfully";
}
Validator:
@Override
public void validate(Object target, Errors errors) {
// TODO Auto-generated method stub
UserBean userBean = (UserBean) target;
if(userBean.getCode().length() > 6 || userBean.getCode().length() < 3){
//注意这里的code.error和message_en.properties里的设置对应的.
errors.rejectValue("code", "code.error");
}
}
三、配置错误信息的国际化显示(message_en.properties)
code.error = code must between 3 and 6...
四、注册页面
<!-- 使用spring标签处理表单 --> <form:form
modelAttribute="userBean" action="userBean.oxp" method="post">
<legend><fmt:message key="welcome.register" /></legend>
<p>Code:<br />
<form:input path="code" /><font color="red" ><form:errors path="code" /></font></p>
<p>Psw:<br />
<form:password path="psw" /><form:errors path="psw" /></p>
<p>Address:<br />
<form:input path="address" /><form:errors path="address" /></p>
<p><input type="submit" /><input type="reset"></input></p>
</form:form>
效果:
花絮:
实现过程中出现过以下异常:
org.springframework.context.NoSuchMessageException: No message found under code '用户名必须大于3个字符,小于6个字符...' for locale 'en'.