Day24 SpringMVC 日期格式转换***

SpringMVC的参数绑定-日期格式转换

1、springMVC默认不支持页面上的日期字符串到后台的Date的转换

  • 前台表单
  出生日期<input type="date" name="birthday2"/><br/>
  • 实体类 与 表单提交数据(字符串)的对应
    在这里插入图片描述

2、有两种方式解决

(1)使用注解实现

注解日期类型转换器
@DateTimeFormat("格式")
只用修改 birthday2 日期属性,添加一个@DateTimeFormat(“格式”)

public class Person {
    private int id;
    private String username;
    private String password;
    private String city;
    private Birthday birthday;
    @DateTimeFormat(pattern ="yyyy-MM-dd")
    private Date birthday2;
}

注解后面的格式怎么写?根据请求发送的真实数据写
如:“2020-10-14” 就写成 “yyyy-MM-dd”

(2)第二种自己编写 转换类,配置到springMVC(全局日期转换器)

编写自定义日期类型转换器实现步骤:

  1. 编写自定义转换器实现Converter重写方法,进行转换
import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

//1:将页面上提交的日期字符串,转成Date对象
public class DateTimeFormatConverter implements Converter<String, Date> {
    public Date convert(String s) {
        System.out.println("convert "+s);
        //2:转换器
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;
        try {
            date = sdf.parse(s);//2020-10-14
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}
  1. springmvc.xml中配置转换工厂,将我们的转换器设置到converters集合中
<!--注册转换器,并注入自定义的转换器-->
    <bean id="formattingConversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <!--配置自己自定义的转换器-->
                <bean id="dateTimeFormatConverter" class="cn.cyl.util.DateTimeFormatConverter"></bean>
            </set>
        </property>
    </bean>
  1. 将转换工厂对象挂载到处理器适配器上(挂载到注解驱动)
  <!--springmvc注解驱动标签,引入转换器-->
  <mvc:annotation-driven conversion-service="formattingConversionService"/>

3、后台Date数据到页面的转换

后台Date数据

		List<Person> list = new ArrayList<Person>();

        list.add(new Person(1,"jack","123456","北京",new Birthday(1998,1,1),new Date()));
        list.add(new Person(2,"rose","123456","changsha",new Birthday(1998,2,2),new Date()));

前台表单

    <c:forEach items="${list}" var="item" >
    	<tr>
   	 		<%--此格式输出的是系统日期格式--%>
			<td>${item.birthday2}</td>
		</tr>
    </c:forEach>

前台显示
在这里插入图片描述

  • 在前台表单添加日期格式化标签

(1)导入标签

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

(2)调用日期格式化标签

<fmt:formatDate value="${item.birthday2}" pattern="yyyy年MM月dd日"/>

前台表单

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

    <c:forEach items="${list}" var="item" >
    	<tr>
   	 		<%--调用日期格式化标签--%>
            <td><fmt:formatDate value="${item.birthday2}" pattern="yyyy年MM月dd日"/></td>
		</tr>
    </c:forEach>

前台显示
在这里插入图片描述
注意:如果是要数据回显的话,就这样

生日:<input type="date" name="birthday" value="<fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd"/>">

将value的值设为这样就行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值