Struts2 日期类型转换

针对日期类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>

效果展示:

时间: 2024-10-29 19:11:21

Struts2 日期类型转换的相关文章

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; }

Struts2自定义类型转换,和处理类型转换错误

Struts2自定义类型转换: 从前台接受到的类型全部是字符串,Struts2自带的一些基本类型转换有时不能满足我们的特别需要,如:日期字符串输入格式,还有一些自定义的类,直接传到后台,我们需要一些自己的转换器: 例: 我有一个Point类型: package cn.jnit.bean; public class Point { private Integer x; private Integer y; public Point() { } public Point(Integer x, Int

struts2的类型转换

1.struts2可以自动转换8大基本数据类型和String以及Date类型 login.jsp: login.jsp <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"

将日期类型转换成年月日的形式

如题. 1 namespace sanyuandemo 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 DateTime dateTime = DateTime.Parse("2014-05-19"); 8 string str = dateTime.ToString("yyyy年M月dd日"); 9 Console.WriteLine(str); 10 Console.Read();

SpringMVC日期类型转换问题三大处理方法归纳

前言 我们在SpringMVC开发中,可能遇到比较多的问题就是前台与后台实体类之间日期转换处理的问题了,说问题也不大,但很多人开发中经常会遇到这个问题,有时很令人头疼,有时间问题暴露的不是很明显,然后逐渐对问题进行跟踪,会发现是日期类型转换失败"映射"不到对应的持久类的日期属性上造成的,由此我还特意写过一篇博文:SpringMVC中出现" 400 Bad Request "错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法.感

SpringMVC日期类型转换问题处理方法归纳

前言 我们在SpringMVC开发中,可能遇到比较多的问题就是前台与后 台实体类之间日期转换处理的问题了,说问题也不大,但很多人开发中经常会遇到这个问题,有时很令人头疼,有时间问题暴露的不是很明显,然后逐渐对问题进行 跟踪,会发现是日期类型转换失败"映射"不到对应的持久类的日期属性上造成的,由此我还特意写过一篇博文:SpringMVC中出现" 400 Bad Request "错误(用@ResponseBody处理ajax传过来的json数据转成bean)的解决方法

SpringBoot整合ssm日期类型转换

日期类型转换,我借助了工具类, 第一种方法 工具类是自定义的 package cn.studio.util; import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import java.io.IOException; import

(转)JSONObject.fromObject 日期类型转换问题

JSONObject.fromObject(对象) 转换 json对象时,日期类型 转换 为日期对象 ,但我需要 的是 "yyyy-MM-dd " 类型 我们可以看出JSONObject net.sf.json.JSONObject.fromObject(Object object, JsonConfig jsonConfig)还接受一个JsonConfig对象,那么我们就应该从这里入手.. 我们可以写一个自己的value处理器 /** *  * 类说明   *  * @简述: Tim

java之struts2之类型转换

在使用servlet开发中,表单中提交的数据到servlet后都是字符串类型,需要程序员手动进行类型转换. 但是到struts2后,基本数据类型struts2都可以转换.但是如果是自定义类型,struts2也不能自动转换. 这个时候需要程序员进行手动转换或者使用struts2提供的类型转换机制来实现. 案例:假如在页面上提交一个坐标点,如何在处理类中获取的也是坐标对象信息. 使用struts2的类型转换机制步骤: 1.编写类型转换器,该类型转换器继承StrutsTypeConverter ,由o