spring MVC 表单验证及其国际化实践

描述:实现用户注册功能,进行简单的数据验证及其国际化提示错误..
一、国际化设置
	<!-- 设置国际化属性文件及其默认编码
		   注意:未设置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>

效果:
spring MVC 表单验证及其国际化实践

花絮:
实现过程中出现过以下异常:
org.springframework.context.NoSuchMessageException: No message found under code '用户名必须大于3个字符,小于6个字符...' for locale 'en'.

你可能感兴趣的:(java,spring,mvc)