【学习笔记】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>接收

时间: 2024-10-10 00:51:05

【学习笔记】Struts2 类型转换的相关文章

java学习笔记5——类型转换

今天毕向东老师讲解了类型转换,其用途似乎不是很广泛,但是感觉很有意思,估计很多同学学习后有点头晕,于是将老师讲解的几点,总结为以下代码中,相信经过对比,能对此次教程有着更透彻的了解 class TypeConversion { public static void main(String[] agrs) { byte b =2;//由于2是常量,系统会自动判断2是否在bate范围内,所以可以赋值给b,而下一句中右边的b为变量,系统无法判断,故而自动升级为int型 //b=b+3;//自动转换:这

JavaScript 学习笔记— —数据类型转换

Js中的数据类型:undefined,string,number,boolen,function,object(null,[],{}) 一.parseInt()和parseFloat() parseInt()方法首先查看位置0处的 字符,判断它是否是个有效数字:如果不是,该方法将返回NaN,不再继续执行其他操作.如果第一个字是+或—号同样支持. parseInt("1234blue"); //returns 1234 parseInt("0xA"); //retur

【C#学习笔记】类型转换

using System; namespace ConsoleApplication { class Program { static void Main(string[] args) { string a = "1234"; int b = Convert.ToInt32(a)+1; Console.Write(b+"\n"); a = Convert.ToString(b); Console.Write(a+"\n"); double s =

PHP学习笔记-变量类型转换

PHP变量类型的转换非常灵活,最常见的是字符串和数字的转换或者数字/字符串到布尔值得转换. 1.字符串到数字的转换,先写一个例子: <?php $a='37'; $a=$a+3; var_dump($a); ?> 结果是 int(40),将a的值改为'37.5',输出为float(40.5),而改为'37hello',那么输出还是int(40),但是改为'hello37',它输出就是int(3)了,由此可以总结出字符串转换为数字的规律了,字符串转换成数字,就是从左到右依次截取数字,直到不是合法

Java学习笔记——String类型转换

一滴水里观沧海,一粒沙中看世界 --一带一路欢迎宴致辞 上代码: 1 package cn.stringtoobj; 2 3 public class TypeConversion { 4 5 public static void main(String[] args) { 6 //将String转int 7 String str = "123"; 8 int[] ints = new int[3]; 9 ints[0] = Integer.parseInt(str); 10 ints

[原创]java WEB学习笔记67:Struts2 学习之路-- 类型转换概述, 类型转换错误修改,如何自定义类型转换器

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

struts2学习笔记(一)

一.struts2和struts1的区别 1.Action类 a) Struts1要求Action类继承于一个抽象类,Struts1普遍使用抽象类编程而不是接口 b) Struts2的Action类可以实现一个Action接口,也可以实现其他接口,使可选和定制的服务成为可能.Struts2提供一个ActionSupport基类去实现常用的接口.Action接口不是必须的,任何有execute标识的POJO对象都可以作为Struts2的Action对象. 2.线程模式 a) Struts1的Act

[原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记71:Struts2 学习之路-- struts2常见的内建验证程序及注意点,短路验证,非字段验证,错误消息的重用

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

[原创]java WEB学习笔记74:Struts2 学习之路--自定义拦截器,struts内建的拦截器

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------