1. 程式人生 > >Struts2日期類型轉換

Struts2日期類型轉換

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日期類型轉換