【学习笔记】Struts2 类型转换
为什么需要类型转换
在基于HTTP协议的Web应用中 客户端请求的所有内容(表单中提交的内容等)都以文本编码的方式传输到服务器端
但服务器端的编程语言(如Java)有着丰富的数据类型 如 int boolean Date 等等
因此 当这些参数进入应用程序时 必须被转换成适合的服务器端编程语言的数据类型
在Servlet中 类型转换工作是由开发者自己完成的
比如我们在易买网里要把分页的信息pageIndex读取出来
String s=request.getParameter("pageIndex");
int pageIndex=Integer.parseInt(s);
类型转换的工作是必不可少的 重复性的. 如果有一个良好的类型转换机制 必将大大节省开发时间,提高开发效率
Struts2提供了强大的类型转换功能
1.内置转换器
对于大部分的常用类型 开发人员在开发过程中不需要自己编码实现类型转换 这是因为在Struts2框架爱中可以完成大多数常用的类型转换
//由内部提供的类型转换器完成
1.String 将 int long double boolean String数组或者java.util.Date类型转换为字符串
2.boolean/Boolean 在字符串和布尔值之间转换
3.char/Character 在字符串和字符之间进行转换
4.int/Integer float/Float long/Long double/Double
5.Date 在字符串和日期只见进行转换 具体输入输出格式与当前的local有关
6.数组和集合 在字符串数组和数组对象 几何对象之间进行转换
2.自定义类型转换器
pom.xml
(需要注意的是build节点 否则局部properties可能无法识别到)
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.3</version>
</dependency> <dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.14</version>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
</build>

包结构如上
converter
//StrutsTypeConverter 继承自 DefaultTypeConverter
//DefaultTypeConverter 有一个实现类 XWorkConverter
@Inject
public void setObjectFactory(ObjectFactory factory) {
this.objectFactory = factory;
// note: this file is deprecated
loadConversionProperties("xwork-default-conversion.properties"); loadConversionProperties("xwork-conversion.properties");
} public String buildConverterFilename(Class clazz) {
String className = clazz.getName();
return className.replace('.', '/') + "-conversion.properties";
}
具体步骤
1.新建一个converter包,在包下创建类型转换器类,继承自抽象类StrutsTypeConvert
//实现两个方法
public Object convertFromString(Map context, String[] values, Class toClass)
//其中 context是OGNL上下文的Map对象
//value是需要转换的字符串值
//toType是要转换的目标类型
public String convertToString(Map context, Object object)
//object是要转换的对象
public class DataConverter extends StrutsTypeConverter {
private final DateFormat[] dfs = {
new SimpleDateFormat("yyyy/MM/dd"),
new SimpleDateFormat("yyyy-MM-dd")
};
public Object convertFromString(Map map, String[] strings, Class aClass) {
String data = strings[0];
for (int i = 0; i < dfs.length; i++) {
try {
return dfs[i].parse(data);
} catch (ParseException e) {
continue;
}
}
throw new TypeConversionException();
}
public String convertToString(Map map, Object o) {
Date date = (Date) o;
return new SimpleDateFormat("yyyy年MM月dd日").format(date);
}
}
2.配置全局类型转换器或者特定类的类型转换器
//特定类
在Action所在的包下建立 类名-conversion.properties
配置: 特定类的属性名=类型转换器类的全名
//全局
在classpath下建立 xwork-conversion.properties
配置: 需要转换的数据类型的类的全名=类型转换器类的全名
3.处理类型转换错误
//需要启动StrutsConversionErrorInterceptor拦截器 它包含在defaultStrack拦截器栈中
(就是不用管)
//需要实现ValidationAware接口 但是ActionSupport实现了这个接口
//配置input结果映射
(失败result=input)
//用<s:filederror>接收
【学习笔记】Struts2 类型转换的更多相关文章
- [Struts2学习笔记] -- 自定义类型转换
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...
- Struts2 学习笔记19 类型转换 Part1
现在来说一说类型转换,提到类型转换其实我们之前早已经用过了,在url传递参数的时候,我们传递过来的参数其实都是String类型的,在显示的时候都自动转换了,像这种简单的转换很好理解,我们要说的是,转换 ...
- Struts2学习笔记(七)——类型转换
1.自动类型转换 Struts2内部提供大量类型转换器,用来完成数据类型转换问题: String和boolean.Boolean:完成字符串与布尔值之间的转换 String和char.Characte ...
- Struts2 学习笔记20 类型转换part2 写自己的转换器
之前说的是调用Struts2的默认转换器,现在我们来说以下写自己的转换器,这个一般不常用,在访问不是自己写的类中可能用到.我们一点点来,因为写自己的转换器需要注意的东西还是很多的. 我们还是用之前的项 ...
- swift学习笔记之-类型转换
//类型转换 import UIKit /*类型转换(Type Casting) 1.类型转换 可以判断实例的类型,也可以将实例看做是其父类或者子类的实例. 2.类型转换使用 is 和 as 操作符实 ...
- Struts2学习笔记--Struts2的体系结构
1. Struts2体系结构 Struts是以前端控制器框架为主体的框架,用户的请求会通过控制器选择不同的Action类来执行具体的操作,在Action类中所有的Servlet对象(request.r ...
- (C/C++学习笔记) 七. 类型转换
七. 类型转换 ● 隐式类型转换 隐式类型转换 implicit type conversions #include<iostream> using namespace std; void ...
- Struts2学习笔记——Struts2与Spring整合
Struts2与Spring整合后,可以使用Spring的配置文件applicationContext.xml来描述依赖关系,在Struts2的配置文件struts.xml来使用Spring创建的 ...
- Struts2学习笔记——Struts2搭建和第一个小程序
1.新建web项目 2.配置Struts2核心过滤器 (1)打开web.xml文件,做以下配置: <?xml version="1.0" encoding="UTF ...
- 【C#学习笔记】类型转换
using System; namespace ConsoleApplication { class Program { static void Main(string[] args) { " ...
随机推荐
- Android查缺补漏(View篇)--事件分发机制源码分析
在上一篇博文中分析了事件分发的流程及规则,本篇会从源码的角度更进一步理解事件分发机制的原理,如果对事件分发规则还不太清楚的童鞋,建议先看一下上一篇博文 <Android查缺补漏(View篇)-- ...
- 在eclipse中创建maven webapp项目时弹出错误-解决办法
在eclipse中创建maven webapp项目时报错: Could not resolve archetype org.apache.maven.archetypes:maven-archetyp ...
- js 原型规则与示例
五大规则 1. 所有的引用类型( 数组 对象 函数 ) 都是 具有对象特性即自由拓展属性 (除了 "null")意外 2. 所有的引用类型(数组 对象 函数 ) 都有一个 prot ...
- Linux安装mysql 在/etc下没有my.cnf 解决办法
进入 /usr/share/mysql 将my-medium.cnf 移动到etc 并且改名为my.cnf
- 通过Azure 存储账号URL鉴别是标准磁盘还是高性能磁盘
对于不知道虚拟机磁盘是标准磁盘还是高性能磁盘时,我们可以通过nslookup解析存储账号的URL,来判断存储账号的类型,从而得知虚拟磁盘的类型 1.标准存储账号的解析结果,字母"st&quo ...
- junit4X系列--Assert与Hamcrest
原文出处:http://www.blogjava.net/DLevin/archive/2012/05/12/377960.html.感谢作者无私分享 到目前,JUnit4所有的核心源码都已经讲解过了 ...
- 使用SoapUI调用Vsphere Web Service
项目中经常需要调用Webservice进行验证测试,下面就介绍下如何使用测试工具SoapUI调用Vsphere vcenter的 Web Service VSphere的Webservice地址默认为 ...
- Java多线程之线程的控制
Java多线程之线程的控制 线程中的7 种非常重要的状态: 初始New.可运行Runnable.运行Running.阻塞Blocked.锁池lock_pool.等待队列wait_pool.结束Dea ...
- 锋利的jQuery笔记
首先分清jQuery对象和DOM对象,这两者可相互转化,如: var $cr=$("#cr"); //jquery对象 var cr=$cr[0] ; //DOM对象 var cr ...
- jumpserver v0.4.0 基于 CenOS7 的安装详解
标签(linux): jumpserver 笔者Q:972581034 交流群:605799367.有任何疑问可与笔者或加群交流 笔者已经弃用Jumpserver,并自已开发了shell跳板机. sh ...