SpringMVC_17_新添加日期,工资的数据的格式化

  • FormattingConversionServiceFactoryBean内部已经注册了:
    1. NumberFormatAnnotationFormatterFactory:支持对数字类型的属性使用@NumberFormate注解
    2. 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";
}

猜你喜欢

转载自blog.csdn.net/weixin_42036647/article/details/85882892