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

效果展示:

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. 札记:android手势识别,MotionEvent

    摘要 本文是手势识别输入事件处理的完整学习记录.内容包括输入事件InputEvent响应方式,触摸事件MotionEvent的概念和使用,触摸事件的动作分类.多点触摸.根据案例和API分析了触摸手势T ...

  2. 【开源】简单4步搞定QQ登录,无需什么代码功底【无语言界限】

    说17号发超简单的教程就17号,qq核审通过后就封装了这个,现在放出来~~ 这个是我封装的一个开源项目:https://github.com/dunitian/LoTQQLogin ————————— ...

  3. iOS的ATS配置 - 2017年前ATS规定的适配

    苹果规定 从2017年1月1日起,新提交的 app 不允许使用NSAllowsArbitraryLoads来绕过ATS(全称:App Transport Security)的限制. 以前为了能兼容ht ...

  4. tomcat开发远程调试端口以及利用eclipse进行远程调试

    一.tomcat开发远程调试端口 方法1 WIN系统 在catalina.bat里:  SET CATALINA_OPTS=-server -Xdebug -Xnoagent -Djava.compi ...

  5. jQuery学习之路(1)-选择器

    ▓▓▓▓▓▓ 大致介绍 终于开始了我的jQuery学习之路!感觉不能再拖了,要边学习原生JavaScript边学习jQuery jQuery是什么? jQuery是一个快速.简洁的JavaScript ...

  6. AFNetworking 3.0 源码解读(十一)之 UIButton/UIProgressView/UIWebView + AFNetworking

    AFNetworking的源码解读马上就结束了,这一篇应该算是倒数第二篇,下一篇会是对AFNetworking中的技术点进行总结. 前言 上一篇我们总结了 UIActivityIndicatorVie ...

  7. 玩转spring boot——结合JPA入门

    参考官方例子:https://spring.io/guides/gs/accessing-data-jpa/ 接着上篇内容 一.小试牛刀 创建maven项目后,修改pom.xml文件 <proj ...

  8. [原]Cachedb 网络模块文档

    Cachedb 网络模块文档 整体结构 多路复用 (epoll 模块) 事件驱动 (事件封装) 缓冲管理 (上层buffer管理) 设计思想 层次化的设计,每一个模块只调用上一个模块的接口,并将耦合聚 ...

  9. UML图中经常用到几种的关系图例

    学习这个东西挺奇怪的,时间一长就容易忘记,或者记不清楚.今天看到一些UML图的关系,发现有些出入了,索性就写下来,以后再忘记的时候过来看看. 在UML的类图中,常见的有以下几种关系: 继承(Gener ...

  10. JavaScript求两个数字之间所有数字的和

    这是在fcc上的中级算法中的第一题,拉出来的原因并不是因为有什么好说的,而是我刚看时以为是求两个数字的和, 很显然错了.我感觉自己的文字理解能力被严重鄙视了- -.故拉出来折腾折腾. 要求: 给你一个 ...