Struts2第五篇【类型转换器、全局、局部类型转换器】
前言
上篇博文已经讲解了,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第五篇【类型转换器、全局、局部类型转换器】的更多相关文章
- 解剖SQLSERVER 第五篇 OrcaMDF里读取Bits类型数据(译)
解剖SQLSERVER 第五篇 OrcaMDF里读取Bits类型数据(译) http://improve.dk/reading-bits-in-orcamdf/ Bits类型的存储跟SQLSERVE ...
- 小白学习vue第五天-第二弹(全局局部、父子、注册语法糖,script/template抽离模板)
全局组件: 就是注册的位置在实例对象的外面 并且可以多个实例对象使用 而局部: 就是在实例对象的内部注册 父组件和子组件的关系 子组件就是在另一个组件里面注册的组件 组件注册语法糖: 就不用Vue.e ...
- Struts2之自定义局部类型转换器、全局类型转换器
Struts2自定义类型转换器分为局部类型转换器和全局类型转换器 (1)局部类型转换器 如果页面传来一个参数reg.action?birthday=2010-11-12到后台action,然后属性用 ...
- struts2视频学习笔记 13-14(自定义局部和全局类型转换器(转换Date格式))
课时13 自定义类型转换器 局部(对某个action类) package tutorial; import java.util.Date; public class HelloWorld { priv ...
- 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸
类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...
- mysql第五篇 : MySQL 之 视图、触发器、存储过程、函数、事物与数据库锁
第五篇 : MySQL 之 视图.触发器.存储过程.函数.事物与数据库锁 一.视图 视图是一个虚拟表(非真实存在的),其本质是‘根据SQL语句获取动态的数据集,并为其命名‘ ,用户使用时只需使用“名称 ...
- 【Python五篇慢慢弹】快速上手学python
快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...
- 【Python五篇慢慢弹】数据结构看python
数据结构看python 作者:白宁超 2016年10月9日14:04:47 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc ...
- 【Python五篇慢慢弹(4)】模块异常谈python
模块异常谈python 作者:白宁超 2016年10月10日12:08:31 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondo ...
随机推荐
- 安装配置 flannel - 每天5分钟玩转 Docker 容器技术(59)
上一节我们部署了 etcd,本节安装和配置 flannel. build flannel flannel 没有现成的执行文件可用,必须自己 build,最可靠的方法是在 Docker 容器中 buil ...
- Struts2学习笔记(十)——自定义拦截器
Struts2拦截器是基于AOP思想实现的,而AOP的实现是基于动态代理.Struts2拦截器会在访问某个Action之前或者之后进行拦截,并且Struts2拦截器是可插拔的:Struts2拦截器栈就 ...
- hdu3081 Marriage Match II(二分+并查集+最大流)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3081 题意: n个女生与n个男生配对,每个女生只能配对某些男生,有些女生相互是朋友,每个女生也可以跟她 ...
- 超简单使用批处理(batch)操作数据库
超简单使用批处理(batch)操作数据库 批处理(batch)是什么 批处理的执行就好比快递员的工作: 未使用批处理的时候,快递员一次从分发点将一件快递发给客户: 使用批处理,则是快递员将所有要派送的 ...
- JavaScript操作DOM节点
DOM (文档对象模型(Document Object Model)) 文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.在网 ...
- Laravel学习基础篇之--路由
终于还是决定再多学一门重量级框架,当然首选必备还是被称为最优雅的Web开发框架--Laravel 对于框架的入门,首先了解它的路由规则是先前必备的,以下是laravel 中几种常见的基础路由规则 // ...
- Varnish后端主机的健康状态检查
author:JevonWei 版权声明:原创作品 配置后端主机的Health Check 环境 Varnish 192.168.198.139 图片服务端 192.168.198.120 程序服务端 ...
- log4j使用和配置详解
日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录.以下是个人经验,具体请参考Log4j文档指南. Log4j下载 在apache网站:htt ...
- 【小白成长撸】--链栈(C语言版)
// 链栈.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> #include <st ...
- 用shell批量编码转换
-------------------------------------文件内容转换:iconv-------------------------------------- 通常,从其他平台拷贝过来 ...