- FormattingConversionServiceFactoryBean内部已经注册了:
- NumberFormatAnnotationFormatterFactory:支持对数字类型的属性使用@NumberFormate注解
- JodaDateTimeFormatAnnotationFormatterFactory:支持对日期类型的属性使用@DataTimeFormat注解
案例
当我想在已有的Employee中添加一个数据,birth,数据类型是Date.并且在注册界面使用yyyy-MM-dd字符串格式就能注册成功。那么我们需要做的是以下步骤:
第一步:在input.jsp中新添加一个Birth属性
Birth:<form:input path="birth"/>
对应修改Employee里面的内容get/setter,toString
这个时候进行添加操作的时候不会成功,因为没有告诉SpringMVC日期这个字符串转换成Date类型
修改做法:
首先确保springmvc.xml中有
<mvc:annotation-driven ></mvc:annotation-driven>
然后在entitles中的Employee的birth字段添加一个声明@@DateTimeFormat(pattern = “yyyy-MM-dd”),告诉其字符串格式即可
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birth;
演示效果
那么这时我们再来添加一个数据salary,进行字符串1,234,567.8转化成Float
做法依然是先在Employee中添加这个字段get/setter,重写toString,然后input.jsp添加这个text
Salary:<form:input path="salary"/>
最后再配置@NumberFormat即可
@NumberFormat(pattern = "#,###,###.#")
private Float salary;
注意:
如果说你既要使用@InitBinder和数据的格式化,那么你需要修改
之前的web.xml
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<!--配置ConversionService-->
<bean id="conversionService"
class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<ref bean="employeeConverter"/>
</set>
</property>
</bean>
现在的web.xml
<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>
也就是说应该使用 class=“org.springframework.format.support.FormattingConversionServiceFactoryBean”
而不是 class=“org.springframework.context.support.ConversionServiceFactoryBean”
tips:要是类型转换失败怎么办
比如说添加一个Employee的时候
@RequestMapping(value = "/emp",method = RequestMethod.POST)
public String save(Employee employee, BindingResult result){
System.out.println(employee);
if(result.getErrorCount()>0){
System.out.println("出错了!");
for(FieldError error:result.getFieldErrors()){
System.out.println(error.getField()+":"+error.getDefaultMessage());
}
}
employeeDao.save(employee);
return "redirect:/emps";
}