springmvc 日期轉換器和編碼過濾器 學習筆記
阿新 • • 發佈:2018-04-22
springmvc 日期轉換器和編碼過濾springmvc不能將String類型轉成Date類型,必須自定義類型轉換器
<!-- 編碼過濾器 --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 映射器(框架) BeanNameUrlHandleMapping表示benan標簽 --> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean> <!-- 適配器(框架) --> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> <!-- 視圖解析器(框架) 通過 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 路徑前綴 --> <property name="prefix" value="/jsp/"/> <!-- 路徑後綴 --> <property name="suffix" value=".jsp"/> <!-- 前綴+視圖邏輯名+後綴=真實路徑 --> </bean>
java代碼
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; import java.text.SimpleDateFormat; import java.util.Date; 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.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractCommandController; /** * 單例 * 處理類 * @author AdminTC */ @SuppressWarnings("deprecation") public class EmpAction extends AbstractCommandController{ public EmpAction(){ //將表單參數封裝到Emp對象中去 this.setCommandClass(Emp.class); } /** * 自定義類型轉換器,將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","增加員工成功"); Emp emp = (Emp) obj; System.out.println(emp.getUsername()+":"+emp.getGender()+":"+emp.getHiredate().toLocaleString()); //將Emp封裝到ModeAndView對象中 modelAndView.addObject("emp",emp); modelAndView.setViewName("success"); return modelAndView; } }
login.jsp
<%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>演示二個控制器</title> </head> <body> <a href="${pageContext.request.contextPath}/index.action" style="text-decoration:none">首頁</a> <hr/> <form action="${pageContext.request.contextPath}/add.action" method="POST"> <table border="2" align="center"> <tr> <th>姓名</th> <td><input type="text" name="username"/></td> </tr> <tr> <th>性別</th> <td> <input type="radio" name="gender" value="男"/>男 <input type="radio" name="gender" value="女" checked/>女 </td> </tr> <tr> <th>入職時間</th> <td> <input type="text" name="hiredate" value="2018-4-22"/> </td> </tr> <tr> <td colspan="2" align="center"> <input type="submit" value="提交"/> </td> </tr> </table> </form> </body> </html>
success.jsp
<%@ 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"
/>
</body>
</html>
<!--
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
-->
springmvc 日期轉換器和編碼過濾器 學習筆記