在默认情况下,springmvc不能将String类型转成Date类型,必须自定义类型转换器
import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.SimpleFormatter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.propertyeditors.CustomDateEditor; import org.springframework.validation.BindException; import org.springframework.web.bind.ServletRequestDataBinder; import org.springframework.web.bind.annotation.InitBinder; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractCommandController; /** * 处理类 * @author 梧桐下的茵 * */ @SuppressWarnings("deprecation") public class EmpAction extends AbstractCommandController { public EmpAction(){ this.setCommandClass(Emp.class); System.out.println("EmpAction() "); } /** * 自定义类型转换器,将String -> Date类型(格式yyyy-MM-dd) */ @Override protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception { //向springmvc内部注入一个自定义的类型转换器 //参数一:将String转换成什么类型的字节码 //参数二:自定义转换规则 //true表示日期可以为空 binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true)); } /** * obj表示封装后的实体 * error表示封装时产生的异常 */ @Override protected ModelAndView handle(HttpServletRequest request, HttpServletResponse response, Object obj, BindException error) throws Exception { ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("message","增加员工成功"); System.out.println("handle() "); Emp emp = (Emp) obj; System.out.println(emp.getUsername() + ":" + emp.getGender()+ ":" + emp.getHiredate().toLocaleString()); modelAndView.setViewName("/jsp/success.jsp"); return modelAndView; } }
日期显示标签fmt
<%@ page language="java" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <body> success.jsp<br/> 成功<br/> ${requestScope.message}<br/> 姓名:${requestScope.emp.username}<br/> 性别:${requestScope.emp.gender}<br/> 入职时间:${requestScope.emp.hiredate}<br/> <hr/> 入职时间:<fmt:formatDate value="${requestScope.emp.hiredate}" type="date" dateStyle="medium" /> <!-- 1)fmt:formatDate 来源于 http://java.sun.com/jsp/jstl/fmt 2)fmt:formatDate作用是格式化日期的显示,例如:2015年5月10日 星期日 3)value表示需要格式化的值 4)type表示显示日期,时间,都显示 type=date表示只显示日期 type=time表示只显示时间 type=both表示日期时间均显示 5)dateStyle表示显示日期的格式:short/medium/default/long/full --> </body> </html>
当不继承也不实现接口时,日期转换器可以这样写
/** * 自定义类型转换器 */ @InitBinder protected void initBinder(HttpServletRequest request,ServletRequestDataBinder binder)throws Exception{ binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true)); }