springMVC实现数据的格式化及校验
首先实现数据的格式化
本案例所需要的jar包
要实现时间格式为yyyy-MM-dd,工资的格式为#,###,###.#,即
这样写的话,项目会运行不下去,原因是String类型不能转换为你需要的格式,基础转换是是可以的,即String类型转Integer类型。
所以我们自己得写一个转换的方法
首先新建一个SpringMVCTest方法
package com.zjq.springmvc.test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import com.zjq.springmvc.crud.dao.EmployeeDao;
import com.zjq.springmvc.crud.entities.Employee;
@Controller
public class SpringMVCTest {
@Autowired
private EmployeeDao employeeDao;
@RequestMapping("/testConversionServiceConverer")
public String testConverter(@RequestParam("employee") Employee employee) {
System.out.println("save: " + employee);
employeeDao.save(employee);
return "redirect:/emps";
}
}
其次在 springMVC里面配置
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<!-- 配置ConversionService -->
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="employeeConverter"/>
</set>
</property>
</bean>
注意得在mvc:annotation-driven 处添加 conversion-service
到此完成数据的格式化,那么接下来就是判断用户所输入的信息是否符合格式,实现数据的校验
此处的数据校验的是用户名不能为空,email为合法地址,生日为过去时间
从上图可找出我们所需要的注解,即@NotEmpty、@Email 、@Past
如果校验错误,我们要打印相应的错误
@RequestMapping(value="/emp", method=RequestMethod.POST)
public String save( @Valid Employee employee, BindingResult result, Map<String, Object> map) {
System.out.println("save: " + employee);
/*
* 如果格式转换失败的话,打印错误信息。
*/
if(result.getErrorCount() > 0) {
System.out.println("出错了!");
for(FieldError error: result.getFieldErrors()) {
System.out.println(error.getField() + ":" + error.getDefaultMessage());
}
//若验证出错,则转向定制的页面
map.put("departments",departmentDao.getDepartments());
return "input";
}
employeedao.save(employee);
return "redirect:/emps";
}
若是错误,会打印错误消息,并且重定向界面,数据也是回显的
接下来就是将错误消息显示在界面上
<form:errors path="*"></form:errors>
<form:errors path="lastName"></form:errors>
<form:errors path="email"></form:errors>
<form:errors path="birth"></form:errors>
此处,*为打印所有消息,其余是打印相应的消息
但是此处错误消息是系统自定义,我们也可自己写
在src文件夹下新建三个文件,配置国际化标准文件
i18n_en_US
NotEmpty.employee.lastName=^^LastName\u4E0D\u80FD\u4E3A\u7A7A.
Email.employee.email=Email\u5730\u5740\u4E0D\u5408\u6CD5
Past.employee.birth=Birth\u4E0D\u80FD\u662F\u4E00\u4E2A\u5C06\u6765\u7684\u65F6\u95F4.
typeMismatch.employee.birth=Birth\u4E0D\u662F\u4E00\u4E2A\u65E5\u671F.
i18n.user=User
i18n.password=Password
i18n_zh_CN
NotEmpty.employee.lastName=^^LastName\u4E0D\u80FD\u4E3A\u7A7A.
Email.employee.email=Email\u5730\u5740\u4E0D\u5408\u6CD5
Past.employee.birth=Birth\u4E0D\u80FD\u662F\u4E00\u4E2A\u5C06\u6765\u7684\u65F6\u95F4.
typeMismatch.employee.birth=Birth\u4E0D\u662F\u4E00\u4E2A\u65E5\u671F.
i18n.user=\u7528\u6237\u540D
i18n.password=\u5BC6\u7801
i18n
NotEmpty.employee.lastName=^^LastName\u4E0D\u80FD\u4E3A\u7A7A.
Email.employee.email=Email\u5730\u5740\u4E0D\u5408\u6CD5
Past.employee.birth=Birth\u4E0D\u80FD\u662F\u4E00\u4E2A\u5C06\u6765\u7684\u65F6\u95F4.
typeMismatch.employee.birth=Birth\u4E0D\u662F\u4E00\u4E2A\u65E5\u671F.
i18n.user=User
i18n.password=Password
在springmvc.xml下配置国际化资源文件即可
<!-- 配置国际化资源文件 -->
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="i18n"></property>
</bean>