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

  1. public class User {
  2. private String username;//名字
  3.  
  4. private Integer age;//年龄
  5.  
  6. private Date birthday;//生日
  7.  
  8. public String getUsername() {
  9. return username;
  10. }
  11.  
  12. public void setUsername(String username) {
  13. this.username = username;
  14. }
  15.  
  16. public Integer getAge() {
  17. return age;
  18. }
  19.  
  20. public void setAge(Integer age) {
  21. this.age = age;
  22. }
  23.  
  24. public Date getBirthday() {
  25. return birthday;
  26. }
  27.  
  28. public void setBirthday(Date birthday) {
  29. this.birthday = birthday;
  30. }
  31.  
  32. }

创建Action

  1. public class LoginAction extends ActionSupport{
  2. private User user;
  3. public String execute(){
  4. System.out.println("姓名:"+user.getUsername());
  5. System.out.println("生日:"+user.getBirthday());
  6. return SUCCESS;
  7. }
  8. public User getUser() {
  9. return user;
  10. }
  11. public void setUser(User user) {
  12. this.user = user;
  13. }
  14. }

创建类型转换器

StrutsTypeContentType类是抽象类,定义了两个抽象方法,用于不同的转换方向

1.public Object convertFromString(Map context, String[] values, Class toType):将一个或多个字符串值转换为指定的类型

2.public String convertToString(Map context, Object object):将指定对象转化为字符串

如果继承StrutsTypeContentType类编写自定义类型转换器,需重载以上两个抽象方法。

  1. public class DateConverter extends StrutsTypeConverter{
  2. //支持转换的多种日期格式,可增加时间格式
  3. private final DateFormat[] dfs={
  4. new SimpleDateFormat("yyyy年MM月dd日"),
  5. new SimpleDateFormat("yyyy-MM-dd"),
  6. new SimpleDateFormat("MM/dd/yy"),
  7. new SimpleDateFormat("yyyy.MM.dd"),
  8. new SimpleDateFormat("yy.MM.dd"),
  9. new SimpleDateFormat("yyyy/MM/dd")
  10. };
  11.  
  12. /**
  13. * 将指定格式字符串转换为日期类型
  14. */
  15. @Override
  16. public Object convertFromString(Map context, String[] values, Class toType) {
  17. String dateStr=values[0]; //获取日期的字符串
  18. for (int i = 0; i < dfs.length; i++) { //遍历日期支持格式,进行转换
  19. try {
  20. return dfs[i].parse(dateStr);
  21. } catch (Exception e) {
  22. continue;
  23. }
  24. }
  25. //如果遍历完毕后仍没有转换成功,表示出现转换异常
  26. throw new TypeConversionException();
  27. }
  28.  
  29. /**
  30. * 将日期转换为指定的字符串格式
  31. */
  32. @Override
  33. public String convertToString(Map context, Object object) {
  34. Date date=(Date) object;
  35. //输出格式是yyyy-MM-dd
  36. return new SimpleDateFormat("yyyy-MM-dd").format(date);
  37. }
  38.  
  39. }

Struts2提供了两种方式配置转换器

1.应用于全局范围的类型转换器

在src目录创建xwork-conversion.properties

  1. java.util.Date=cn.strutstypeconverter.DateConverter

2.应用于特定类的类型转换器

在特定类的相同目录下创建一个名为ClassName-conversion.properties的属性文件

  1. user.birthday=cn.strutstypeconverter.DateConverter
  2.  
  3. 配置struts.xml
  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE struts PUBLIC
  3. "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  4. "http://struts.apache.org/dtds/struts-2.0.dtd">
  5. <struts>
  6. <package name="default" namespace="/" extends="struts-default">
  7. <!-- login指定的Action -->
  8. <action name="login" class="cn.action.LoginAction">
  9. <result name="success">
  10. success.jsp
  11. </result>
  12. <result name="input">
  13. index.jsp
  14. </result>
  15. </action>
  16. </package>
  17. </struts>

开发输入与展示页面

index.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6. <%@taglib uri="/struts-tags" prefix="s"%>
  7. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  8. <html>
  9. <head>
  10. <base href="<%=basePath%>">
  11.  
  12. <title>My JSP 'index.jsp' starting page</title>
  13. </head>
  14.  
  15. <body>
  16. <!-- 错误信息 -->
  17. <s:fielderror></s:fielderror>
  18. <!-- 表单的提交 -->
  19. <s:form action="login" method="post" namespace="/">
  20. <div class="infos">
  21. <table class="field">
  22. <tr><td>用户名:<s:textfield name="user.username" /></td>
  23. </tr>
  24. <tr><td>年龄:<s:password name="user.age"/></td>
  25.  
  26. </tr>
  27. <tr><td>生日:<s:textfield name="user.birthday"/> </td>
  28. </tr>
  29. <tr><td><s:submit type="submit" value="提交"/></td></tr>
  30. </table>
  31.  
  32. </div>
  33. </s:form>
  34. </body>
  35. </html>

success.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
  2. <%
  3. String path = request.getContextPath();
  4. String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  5. %>
  6. <%@taglib uri="/struts-tags" prefix="s"%>
  7. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  8. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  9. <html>
  10. <head>
  11. <base href="<%=basePath%>">
  12.  
  13. <title>My JSP 'index.jsp' starting page</title>
  14. </head>
  15.  
  16. <body>
  17. <h1>成功</h1>
  18. <s:property value="user.birthday"/>
  19. <s:date name="user.birthday" format="yyyy年MM月dd日"/>
  20. </body>
  21. </html>

效果展示:

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

  1. Struts2 日期类型转换

    针对日期类java.util.Date进行类型转换,要求客户端使用"yyyy-MM-dd","yyyy/MM/dd"中的任意一种输入,并以"yyyy- ...

  2. struts2 jsp提交日期类型转换及国际化实现

    概述:下面通过jsp提交输入注册信息信息,同时完成过程文件国家化问题演示说明.[注册日期转换用注解方式实现] 工程截图: 注册页面jsp文件: <%@ page language="j ...

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

    Struts2自定义类型转换: 从前台接受到的类型全部是字符串,Struts2自带的一些基本类型转换有时不能满足我们的特别需要,如:日期字符串输入格式,还有一些自定义的类,直接传到后台,我们需要一些自 ...

  4. 关于Struts2的类型转换详解

    详细出处参考:http://www.jb51.net/article/35465.htm 一.类型转换的意义 对于一个智能的MVC框架而言,不可避免的需要实现类型转换.因为B/S(浏览器/服务器)结构 ...

  5. Struts2的类型转换机制

    Struts2的类型转换机制 在基于HITP 协胆的Web 应用中,客户端〈浏览器〉和服务器之间传输的都是字符串形式的数据,换句话说,服务器接收到的用户数据只能是字符串或字符数组, 但在服务器端的Ja ...

  6. (十二)struts2的类型转换

    所有的MVC框架,都属于表现层的解决方案,都需要负责收集用户请求参数,并将请求参数传给应用的控制器组件. 这时问题出现了,所有的请求参数都是字符串类型数据,因此MVC框架必须具备将这些字符串请求参数转 ...

  7. Struts2的类型转换

    Struts2的类型转换 类型转换的作用: HTTP请求都是字符串类型,需要把这些字符串类型转化成相应的数据类型,使得Web应用的控制组件可以使用. 1.內建的类型转换器 Struts2可以完成大多数 ...

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

    http://blog.csdn.net/chenleixing/article/details/45190371 前言 我们在SpringMVC开发中,可能遇到比较多的问题就是前台与后台实体类之间日 ...

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

    方法一:实体类中加日期格式化注解 @DateTimeFormat(pattern = "yyyy-MM-dd") private Date receiveAppTime; 方法二: ...

随机推荐

  1. mapreduce多文件输出的两方法

    mapreduce多文件输出的两方法   package duogemap;   import java.io.IOException;   import org.apache.hadoop.conf ...

  2. HTML 事件(三) 事件流与事件委托

    本篇主要介绍HTML DOM中的事件流和事件委托. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三) 事件流与事件委托 4 ...

  3. 【开源】分享2011-2015年全国城市历史天气数据库【Sqlite+C#访问程序】

    由于个人研究需要,需要采集天气历史数据,前一篇文章:C#+HtmlAgilityPack+XPath带你采集数据(以采集天气数据为例子),介绍了基本的采集思路和核心代码,经过1个星期的采集,历史数据库 ...

  4. [C#] 简单的 Helper 封装 -- RegularExpressionHelper

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. 缓存、队列(Memcached、redis、RabbitMQ)

    本章内容: Memcached 简介.安装.使用 Python 操作 Memcached 天生支持集群 redis 简介.安装.使用.实例 Python 操作 Redis String.Hash.Li ...

  6. Consul-template的简单应用:配置中心,服务发现与健康监测

    简介 Consul-template是Consul的一个方扩展工具,通过监听Consul中的数据可以动态修改一些配置文件,大家比较热衷于应用在Nginx,HAProxy上动态配置健康状态下的客户端反向 ...

  7. Android 在Android代码中执行命令行

    1.路径最好不要是自己拼写的路径/mnt/shell/emulated/0/wifidog.conf 最好是通过方法获取的路径,不然可能导致命令无效  (挂载点的原因) public static f ...

  8. 关于Hadoop用户体系的设想(胡思乱想)

    关于Hadoop的用户体系设计设想 Hadoop并没有一个完整的用户体系,其权限控制的对象,主要是Linux的其它用户(即非安装Hadoop的用户),控制方式也和Linux的文件权限很像,目前权限控制 ...

  9. 解除win7网络限速.

    在电脑刚买或者系统重装了的时候,win7系统会默认限制20%的网络速度,限制了我们的上网速度,我们可以解决这个限制,让上网变得更快 下面是操作步骤 1.开始>运行 2.输入以下命令,然后确定 g ...

  10. 钉钉开放平台demo调试异常问题解决:hostname in certificate didn't match

    今天研究钉钉的开放平台,结果一个demo整了半天,这帮助系统写的也很难懂.遇到两个问题: 1.首先是执行demo时报unable to find valid certification path to ...