Struts2日期類型轉換
阿新 • • 發佈:2018-04-07
mit sym 重載 -- found lB int alt lang
https://www.cnblogs.com/jingpeipei/p/5945724.html
針對日期類java.util.Date進行類型轉換,要求客戶端使用“yyyy-MM-dd”,“yyyy/MM/dd”中的任意一種輸入,並以“yyyy-MM-dd”的格式輸出,該類型轉換應用於全局範圍
先定義一個實體類
package cn.entity; import java.util.Date; public class User { private String username;//名字 private Integer age;//年齡 private Date birthday;//生日 public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
創建Action
package cn.action; import cn.entity.User; import com.opensymphony.xwork2.ActionSupport; public class LoginAction extends ActionSupport{ private User user; public String execute(){ System.out.println("姓名:"+user.getUsername()); System.out.println("生日:"+user.getBirthday()); return SUCCESS; } public User getUser() { return user; } public void setUser(User user) { this.user = user; } }
創建類型轉換器
StrutsTypeContentType類是抽象類,定義了兩個抽象方法,用於不同的轉換方向
1.public Object convertFromString(Map context, String[] values, Class toType):將一個或多個字符串值轉換為指定的類型
2.public String convertToString(Map context, Object object):將指定對象轉化為字符串
如果繼承StrutsTypeContentType類編寫自定義類型轉換器,需重載以上兩個抽象方法。
package cn.strutstypeconverter; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Map; import org.apache.struts2.util.StrutsTypeConverter; import com.opensymphony.xwork2.conversion.TypeConversionException; public class DateConverter extends StrutsTypeConverter{ //支持轉換的多種日期格式,可增加時間格式 private final DateFormat[] dfs={ new SimpleDateFormat("yyyy年MM月dd日"), new SimpleDateFormat("yyyy-MM-dd"), new SimpleDateFormat("MM/dd/yy"), new SimpleDateFormat("yyyy.MM.dd"), new SimpleDateFormat("yy.MM.dd"), new SimpleDateFormat("yyyy/MM/dd") }; /** * 將指定格式字符串轉換為日期類型 */ @Override public Object convertFromString(Map context, String[] values, Class toType) { String dateStr=values[0]; //獲取日期的字符串 for (int i = 0; i < dfs.length; i++) { //遍歷日期支持格式,進行轉換 try { return dfs[i].parse(dateStr); } catch (Exception e) { continue; } } //如果遍歷完畢後仍沒有轉換成功,表示出現轉換異常 throw new TypeConversionException(); } /** * 將日期轉換為指定的字符串格式 */ @Override public String convertToString(Map context, Object object) { Date date=(Date) object; //輸出格式是yyyy-MM-dd return new SimpleDateFormat("yyyy-MM-dd").format(date); } }
Struts2提供了兩種方式配置轉換器
1.應用於全局範圍的類型轉換器
在src目錄創建xwork-conversion.properties
java.util.Date=cn.strutstypeconverter.DateConverter
2.應用於特定類的類型轉換器
在特定類的相同目錄下創建一個名為ClassName-conversion.properties的屬性文件
user.birthday=cn.strutstypeconverter.DateConverter
配置struts.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> <package name="default" namespace="/" extends="struts-default"> <!-- login指定的Action --> <action name="login" class="cn.action.LoginAction"> <result name="success"> success.jsp </result> <result name="input"> index.jsp </result> </action> </package> </struts>
開發輸入與展示頁面
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP ‘index.jsp‘ starting page</title> </head> <body> <!-- 錯誤信息 --> <s:fielderror></s:fielderror> <!-- 表單的提交 --> <s:form action="login" method="post" namespace="/"> <div class="infos"> <table class="field"> <tr><td>用戶名:<s:textfield name="user.username" /></td> </tr> <tr><td>年齡:<s:password name="user.age"/></td> </tr> <tr><td>生日:<s:textfield name="user.birthday"/> </td> </tr> <tr><td><s:submit type="submit" value="提交"/></td></tr> </table> </div> </s:form> </body> </html>
success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@taglib uri="/struts-tags" prefix="s"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP ‘index.jsp‘ starting page</title> </head> <body> <h1>成功</h1> <s:property value="user.birthday"/> <s:date name="user.birthday" format="yyyy年MM月dd日"/> </body> </html>
效果展示:
或
Struts2日期類型轉換