Struts2日期类型转换

针对日期类java.util.Date进行类型转换,要求客户端使用“yyyy-MM-dd”,“yyyy/MM/dd”中的任意一种输入,并以“yyyy-MM-dd”的格式输出,该类型转换应用于全局范围

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

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类编写自定义类型转换器,需重载以上两个抽象方法。

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>

效果展示:

原文地址:https://www.cnblogs.com/Smile-123/p/5946785.html