前言

上篇博文已经讲解了,Struts2为我们实现了数据自动封装…由上篇的例子我们可以看出,表单提交过去的数据全都是String类型的,但是经过Struts自动封装,就改成是JavaBean对应成员变量的类型了。

但是呢,日期类型只支持是yyyy-MM-dd这种格式的,因为我们在上个例子中直接使用的是Struts支持的格式,因此没有报错…本篇博文就是讲解Struts如何对日期类型的格式更好地支持

日期转换问题

当我们使用的是yyyyMMdd这种格式的时候,我们看看Struts的自动封装能不能解析出相对应的日期

直接抛出了异常

分析

那么,我们怎么让Struts能够支持更多的日期格式呢??比如,我想Struts在自动封装数据的时候支持yyyyMMdd,yyyy年MM月dd日这样的日期格式…..

Struts提供了转换器给我们使用,也就是,我们可以自定义转换器,我们定义了什么格式,Struts就可以根据对应的格式进行自动封装

当我们写完自定义转换器,是需要向Struts说明我们写了,不然的话,Struts是不知道我们自定义了转换器类的…

也就是说,我们要想实现类型转换,需要两步

  • 编写自定义转换器类
  • 告诉Struts我们写了转换器类

自定义转换器类

一般地,我们想要编写自定义转换器类,都是实现StrutsTypeConverter类的….

/**
* Created by ozc on 2017/5/1.
* 自定义异常转换器类
*
* 我们要实现的就是:在Struts转换的时候,
*
*/
public class MyConvter extends StrutsTypeConverter { //需求,当Struts自动封装数据时,也支持yyyyMMdd,yyyy年MM月dd日等格式的支持\
SimpleDateFormat[] format = {new SimpleDateFormat("yyyy-MM-dd"), new SimpleDateFormat("yyyyMMdd"), new SimpleDateFormat("yyyy年MM月dd日")}; /**
* 把String转换为指定的类型 【String To Date】
*
*
* @param map
* 当前上下文环境
* @param strings
* jsp表单提交的字符串的值
* @param aClass
* 要转换为的目标类型
*/
@Override
public Object convertFromString(Map map, String[] strings, Class aClass) { //判断是否有值
if (strings == null) {
return null;
}
//判断是否是日期类型的
if (Date.class != aClass) {
return null;
} //遍历循环
for (SimpleDateFormat dateFormat : format) {
try { //解析传递进来的第一个就行啦
dateFormat.parse(strings[0]);
} catch (ParseException e) {
//如果格式不对,那么就跳出当前的循环
continue;
}
}
return null;
}
@Override
public String convertToString(Map map, Object o) {
return null;
}
}

告诉Struts,我写了转换器类

告诉Struts我写了一个转换器类,也分两种方式

  • 定义了局部转换器类,就当前包下的Action类有效
  • 定义了全局转换器类,整个项目有效

全局转换器

步骤:

  • 在src目录下创建一个名为xwork-conversion.properties的文件
  • 配置文件的内容:需要转换的类类型=转换器类的全名java.util.Date=qwer.MyConvter

局部转换器类

步骤:

  • 在当前的Action包下创建名为Action名-conversion.properties的文件
  • 文件的内容为:需要转换的字段【如果是JavaBean里的字段,需要写上JavaBean的】=转换器类的全名user.birthday=qwer.MyConvter

效果


错误提示页面

当发生了日期转换的异常时,Struts给出的页面是这样子的:

这个我们称之为input视图,我们要做的就是给出用户更友好的提示,于是在struts.xml文件中配置:如果返回的是input视图,那么跳转到我们相对应的页面上

   <result name="input">/error.jsp</result>

Struts2第五篇【类型转换器、全局、局部类型转换器】的更多相关文章

  1. 解剖SQLSERVER 第五篇 OrcaMDF里读取Bits类型数据(译)

    解剖SQLSERVER 第五篇  OrcaMDF里读取Bits类型数据(译) http://improve.dk/reading-bits-in-orcamdf/ Bits类型的存储跟SQLSERVE ...

  2. 小白学习vue第五天-第二弹(全局局部、父子、注册语法糖,script/template抽离模板)

    全局组件: 就是注册的位置在实例对象的外面 并且可以多个实例对象使用 而局部: 就是在实例对象的内部注册 父组件和子组件的关系 子组件就是在另一个组件里面注册的组件 组件注册语法糖: 就不用Vue.e ...

  3. Struts2之自定义局部类型转换器、全局类型转换器

    Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器  如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用 ...

  4. struts2视频学习笔记 13-14(自定义局部和全局类型转换器(转换Date格式))

    课时13 自定义类型转换器 局部(对某个action类) package tutorial; import java.util.Date; public class HelloWorld { priv ...

  5. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  6. mysql第五篇 : MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁

    第五篇 : MySQL 之 视图.触发器.存储过程.函数.事物与数据库锁 一.视图 视图是一个虚拟表(非真实存在的),其本质是‘根据SQL语句获取动态的数据集,并为其命名‘ ,用户使用时只需使用“名称 ...

  7. 【Python五篇慢慢弹】快速上手学python

    快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...

  8. 【Python五篇慢慢弹】数据结构看python

    数据结构看python 作者:白宁超 2016年10月9日14:04:47 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc ...

  9. 【Python五篇慢慢弹(4)】模块异常谈python

    模块异常谈python 作者:白宁超 2016年10月10日12:08:31 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondo ...

随机推荐

  1. js面试题知识点全解(一变量类型和计算)

    1.js中使用typeof能得到哪些类型 2.何时使用===和== 3.js中的内置函数 4.js变量按存储方式区分为哪些类型,并描述其特点 5.如何理解json 以下对这些问题的知识点做一些总结: ...

  2. 一个C#操作RabbitMQ的完整例子

    一.下载RabbitMQ http://www.rabbitmq.com/install-windows.html 二.下载OTP http://www.erlang.org/downloads 三. ...

  3. 学问Chat UI(3)

    前言 上文学问Chat UI(2)分析了消息适配器的实现; 本文主要学习下插件功能如何实现的.并以图片插件功能作为例子详细说明,分析从具体代码入手; 概要 分析策略说明 "+"功能 ...

  4. 33、线程与全局解释器锁(GIL)

    之前我们学了很多进程间的通信,多进程并发等等,今天我们来学习线程,线程和进程是什么关系,进程和线程有什么相同而又有什么不同今天就来揭晓这个答案. 一.线程概论 1.何为线程 每个进程有一个地址空间,而 ...

  5. 搞java的都土鳖

    spring不就几个破框架让人们下载使用吗,但是官网什么都有,就是没有下载链接.java程序员被那些垃圾框架强奸的体无完肤,还乐在其中,还什么SSH,哇哦!java好像跟企业干上了,什么企业bean, ...

  6. 使用CXF开发JAX-WS类型的WebService

    使用CXF记得要先加入CXF的jar包 方法1: Cxf编程实现: l 使用jaxwsServerFactoryBean发布 webservice服务端. 需要设置: jaxwsServerFacto ...

  7. 新建github项目,邀请成员

    创建一个项目(repository) 进入项目,点击 SETTINGS 点击左侧导航的 Collaborators 在 Teams 里有个下拉菜单,里面你可以给你的 team 选择 write(写)权 ...

  8. 浏览器控制台console的使用

    前天在团队项目中因为产品需求在提交订单的时候需要多个页面的数据作为提交接口的参数,这种需求让人醉醉的,项目用angular来做的,没办法只能用全局变量来定义要交互的值和localStorage来临时的 ...

  9. Linux-mount命令和umount命令 (8)

    mount:用于挂载文件系统,使能访问其它文件系统中的资源 umount:用于卸载已挂载的文件系统 mount: 格式: mount [-参数] [设备名称] [挂载点] 其中常用的参数(参数默认自带 ...

  10. 结对编程1--基于GUI的四则运算题目生成器

    最终项目详细代码(coding地址)/李志强的博客/我的详细代码/方言的博客 一.需求分析 1.实现之前项目的功能,如:除了整数之外,还要支持真分数的四则运算,真分数的运算,并且要求能处理用户的输入, ...