数据格式化
日期类:Employee.java添加birth字段,setter/getter并重写toString.在录入页面展现
输入abcccccccccccc看看
如何解决
标配<mvc:annotation-driven>
生日目标属性上添加注解并设定格式:@DateTimeFormat(pattern="yyyy-MM-dd")
数字类:@NumberFormat
字符格式数字串,试试1,234.8
400报错,参数不合适
原理:FormattingConversionServiceFactroyBean
回顾我们的自定义转化器
<mvc:annotation-driven conversion-service="conversionServiceFactoryBean"></mvc:annotation-
driven>
<bean id="conversionServiceFactoryBean"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<list>
<ref bean="employeeConvert"/><!-- 注意小写类名首字母和名称 -->
</list>
</property>
</bean>
转换+格式化
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<bean id="conversionService"
class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<ref bean="employeeConvert"/>
</list>
</property>
</bean>
bindingResult添加出错信息
@RequestMapping(value="/emp",method=RequestMethod.POST)
public String save(Employee employee,BindingResult bindingResult)
{
System.out.println(employee.toString());
if(bindingResult != null && bindingResult.getFieldErrorCount()>0)
{
List<FieldError> fieldErrors = bindingResult.getFieldErrors();
for (FieldError fieldError : fieldErrors)
{
System.out.println(fieldError.getField()+"\t"+fieldError.getDefaultMessage());
}
throw new RuntimeException("数据出错......");
}
employeeDao.save(employee);
return "redirect:/emps";
}
生日、薪水输入abc字符串试试
后台会打印对应出错提示
数据的校验提出的问题
how:添加注解
校验出问题了该转到那个提示页面?
如何将错误信息国际化并放在出错录入字段后面?
JSR303数据验证
环境搭建及演示
1. 添加符合HibernateValidator验证框架的jar包
2. 添加注解<mvc:annotation-driven></mvc:annotation-driven>会默认装配好一个 LocalValidatorFactoryBean
3. Employee.java中添加Field验证要求的相关注解,比如名字不为空、email格式要合法等
4. Save方法对应的POJO参数前面添加@Valid
public String save(@Valid Employee employee,BindingResult bindingResult
录入信息时,lastName不填写和email故意填错
5. 需校验的 Bean对象和其绑定结果对象或错误对象时成对出现的,它们之间不允许声明其他的入参
6. 出错误后重新回到录入页面(Map带性别、部门参数信息)
@RequestMapping(value="/emp",method=RequestMethod.POST)
public String save(@Valid Employee employee,BindingResult bindingResult,Map<String,Object> map)
{
if(bindingResult.getErrorCount()>0)
{
System.out.println("录入信息出错了......");
List<FieldError> list = bindingResult.getFieldErrors();
for (FieldError fieldError : list)
{
System.out.println(fieldError.getField()+"\t"+fieldError.getDefaultMessage());
//出错后跳转回录入页面
map.put("departments",departmentDao.getDepartments());
map.put("genders", getGenderUtils());
return "input";
}
}
System.out.println(employee.toString());
employeeDao.save(employee);
return "redirect:/emps";
}
显示:每个字段后面用
<form:errors path="XXX字段"></form:errors>
7. 对于使用tomcat6的同学提醒
页面上显示错误消息
显示:每个字段后面用<form:errors path="XXX字段"></form:errors>
定制
新建i18n.properties
注解名+类名+需要限制的field
NotEmpty.employee.lastName
Email.employee.email
配置国际化资源文件在springmvc相关配置文件里面
<!--国际化信息 配置 -->
<bean id="messageSource"
class="org.springframework.context.support.ResourceBundleMessageSource">
<property name="basename" value="i18n"/><!-- 国际化信息所在的文件名 -->
</bean>