日期处理和日期显示

日期处理

  • 此时SpringMVC的项目配置和SpringMVC博客集中(指SpringMVC 02)配置相同
  • 日期处理分为单个日期处理和类中全局日期处理
  • 单个日期处理:
  • 使用@DateTimeFormat注解 + < mvc:annotation-driven />注解驱动
  • webapp/index.jsp:网站的首页,用来选定时间并提交给服务器
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>index.jsp</title>
</head>
<body>
<h2>单个日期处理</h2>
<form action="${pageContext.request.contextPath}/date.action">
日期:<input type="date" name="date">
<input type="submit" value="提交">
</form>
</body>
</html>
  • webapp/admin/date.jsp:请求的响应页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>date.jsp</title>
</head>
<body>
<h2>date......page......</h2>
</body>
</html>
  • 在springmvc.xml配置文件中新增注解驱动:解析用来进行日期注入的注解
    <!-- 添加注解驱动-->
<mvn:annotation-driven/>
  • 新增SpringMVC控制器:DateAction,其中action方法的Date类型参数用@DateTimeFormat(pattern = "yyyy-MM-dd")标识
  • 注解后面的pattern参数指定了前端传来的日期(实际上以字符串的形式传递到后端),以什么样的格式注入到date参数中
  • 但是在输出date变量时如果要更加直观的显示日期格式,必须另外再用SimpleDateFormat修改日期格式
  • 所以"yyyy-MM-dd"会出现两次
package com.example.controller;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import java.text.SimpleDateFormat;
import java.util.Date; @Controller
public class DateAction {
@RequestMapping("/date")
public String data(
@DateTimeFormat(pattern = "yyyy-MM-dd")
Date date){
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(sf.format(date));
return "date";
}
}
  • 部署并启动tomcat测试
  • 网站首页(left),响应页面(mild),控制台输出(right)见下:可见通过注解和注册注解驱动可以实现日期类型变量的注入

  • 关于单个日期类型注入处理的补充:如果要注入的单个变量不是简单的Date类型,而是含有Date类型属性的对象
  • 需要在该对象的Date类型的属性上或者在该属性的setter方法上使用@DateTimeFormat(pattern = "yyyy-MM-dd")
  • 更特殊的,如果是json类型的数据对象,需要在该属性的getter方法上添加@DateTimeFormat(pattern = "yyyy-MM-dd")
  • 类中全局日期处理:
  • 如果一个action方法有多个日期类型的变量要注入值,或者多个类中有多个action方法需要注入日期类型的变量,挨个使用@DateTimeFormat注解的方式无疑显得非常繁琐
  • 可以通过在类中声明自定义注解的方式,来帮助解析本类中的所有日期类型,完成类中全局日期处理,简化日期类型转换和注入操作
  • 删除springmvc中的注解驱动:< mvc:annotation-driven />
  • 修改DateAction控制器如下:注册全局日期处理注解
package com.example.controller;

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping; import java.text.SimpleDateFormat;
import java.util.Date; @Controller
public class DateAction {
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); //注册全局日期处理注解
@InitBinder
public void initBinder(WebDataBinder webDataBinder){
//注册自定义的编辑器,对日期类型进行自定义配置,指定日期注入时的格式,并允许日期为空
webDataBinder.registerCustomEditor(Date.class, new CustomDateEditor(sf, true));
} //每个方法上不用添加日期注入的注解,只要在类中注册全局日期处理注解即可
@RequestMapping("/date")
public String data(Date date){
System.out.println(sf.format(date));
return "date";
}
}
  • 部署并启动tomcat测试
  • 网站首页(left),响应页面(mild),控制台输出(right)见下:可见通过注册全局日期处理注解,也可以完成日期类型变量的注入,并简化挨个添加单个注解的繁琐操作

日期显示

  • 将后端传来的含有日期类型属性的用户信息列表展示在响应页面中
  • 需要使用jstl标签库,在pom.xml中新增jstl依赖
    <!-- 引入jstl标签库-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
  • webapp/index.jsp:网站的首页,并用于发送请求,从后端请求用户信息
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>index.jsp</title>
</head>
<body>
<a href="${pageContext.request.contextPath}/date.action">显示用户信息列表,包含日期类型的属性</a>
</body>
</html>
  • webapp/admin/date.jsp:请求的响应页面,并将请求来的用户信息列表展示在该页面上
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%-- 导入jstl核心标签库--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%-- 导入jstl格式化标签库--%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <html>
<head>
<title>date.jsp</title>
</head>
<body>
<h2>显示用户信息列表,包含日期类型的属性</h2>
<table width="800px" border="1">
<tr>
<th>用户名</th>
<th>生日</th>
</tr>
<c:forEach items="${list}" var="user">
<tr>
<td>${user.name}</td>
<!--
不使用jstl格式化标签库来进行日期格式化处理
<td>${user.birthday}</td>
--> <!-- 使用jstl格式化标签库来进行日期格式化处理 -->
<td> <fmt:formatDate value="${user.birthday}" pattern="yyyy-MM-dd"/></td>
</tr>
</c:forEach>
</table>
</body>
</html>
  • DateAction控制器
package com.example.controller;

import com.example.pojo.User;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List; @Controller
public class DateAction {
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); //注册全局日期处理注解
@InitBinder
public void initBinder(WebDataBinder webDataBinder){
//注册自定义的编辑器,对日期进行自定义配置,指定日期注入时格式,允许日期为空
webDataBinder.registerCustomEditor(Date.class, new CustomDateEditor(sf, true));
} //User实体类含有属性:name(String),birthday(Date)。无参构造方法。全参的有参构造方法,getter,setter,toString方法
@RequestMapping("/date")
public String data(HttpServletRequest request) throws ParseException {
User u1 = new User("荷包蛋", sf.parse("2002-08-23"));
User u2 = new User("饺子", sf.parse("2001-08-28"));
User u3 = new User("橘子", sf.parse("2001-03-14"));
List<User> list = new ArrayList<>();
list.add(u1);
list.add(u2);
list.add(u3);
request.setAttribute("list", list);
return "date";
}
}
  • 部署并启动tomcat测试
  • 不用jstl格式化标签库处理时:网站首页(left),响应页面(right)

  • 使用jstl格式化标签库处理时:网站首页(left),响应页面(right)

最新文章

  1. HTML学习体会
  2. 【leetcode】Candy(hard) 自己做出来了 但别人的更好
  3. android开发之——获取相册图片和路径
  4. Spring框架学习之第8节
  5. cocos2d-x 用浏览器打开网页
  6. Robot Instructions
  7. 开始学习web前端技术
  8. linux内核编程学习——草稿
  9. Sql Server (错误:7302)
  10. ESLint 的正式使用感受
  11. 【4】Asp.Net Core2.2中间件多扩展对应应用
  12. spring整合mybatis,批量扫描mapper接口出现异常
  13. sql中的 IF 条件语句的用法
  14. 安装office2010提示要安装MSXML6.10.1129.0解决方法
  15. ClassicFTP for Mac(FTP 客户端)破解版安装
  16. Write operations are not allowed in read-only mode 只读模式下(FlushMode.NEVER/MANUAL)写操作不允
  17. 更快的速度、更好的服务——易普优APS云排程
  18. leetcode第一刷_Simplify Path
  19. Laravel 5.2 数据库迁移和数据填充
  20. 折腾WordPress感想

热门文章

  1. 重学ES系列之新型数据结构Map应用
  2. python基础知识-day9(库学习)
  3. Spring框架系列(8) - Spring IOC实现原理详解之Bean实例化(生命周期,循环依赖等)
  4. 如何通过WinDbg获取方法参数值
  5. 抓到 Netty 一个 Bug,顺带来透彻地聊一下 Netty 是如何高效接收网络连接的
  6. android studio 初印象
  7. 临近梯度下降算法(Proximal Gradient Method)的推导以及优势
  8. [ 1 x 1 ] Convolution-1*1卷积的作用
  9. java-数据输入,分支结构
  10. [System.OutOfMemoryException] {函数求值已禁用,因为出现内存不足异常。