Struts2类型转换和自定义类型


类型转换:就是把页面请求的参数转换成action类中所需要的类型;

Struts的常见的类型转换是通过struts的拦截器自动完成的,不需要我们额外配置,但是如果遇到不常见的类型转换,自动转换就会失败,这时就需要我们自定义类型转换器,来实现类型转换。

下面我们就来学习一下struts常见的类型转换的原理和我们自定义类型转换器时,都有哪些步骤。

 

一、struts常见的类型转换

在struts的传参过程中,struts帮助我们做了常见参数的类型转换,如:我们在浏览器中输入下面的url:

http://localhost:8080/Struts2_myConversion/type/test?name=jack&age=9

在http传参的时候,参数的类型都是string的,但是action类中age却是int类型的,所以需要将age从String转换成int。

 

所谓的类型转换,就是把字符串转为特定类型,或者是特定类型转为字符串。

特定类型转字符串好转(直接toString()就可以了),但是字符串转特定类型,情况就比较多了。

一般的特定类型struts2已经帮助我们解决了,但是特殊的类型,例如坐标点Point类型就不太好转。

这个是否就需要我们自定义转换器来实现坐标点Point的类型转换了。


二、自定义类型转换

我们介绍两种自定义类型转换方法,一种是局部转换器;一种是全局转换器。

我们假定浏览器中输入的url是:

http://localhost:8080/Struts2_myConversion/type/test?p=3,4

p=3,4指的是坐标先得x坐标是3,y坐标是4。

a) 局部转换器:

     i. 原理:浏览器中输入上面的url,回车提交参数,struts2接到参数后,在struts2常见的类型转换中,没有找到对应的Point类型(这个Point类型是根据TestAction类中定义的private Point p,知道参数中的p是Point类型),因此,struts2会先到对应的名为test的action类的包下面找有没有这个action类名对应的转换文件(格式是:action类型-conversion.properties),如图:



在转换文件TestAction-conversion.properties中,找需要转换的参数名是否在转换文件中的name一栏,如图:



如果找到了,就进入到转换文件中的value一栏中的类中,把需要转换的参数对应的值传给转换器中的方法

convertValue(Map context, Object value, Class toType)中的形参value,把要转换的类型传给toType,如图是三个形参的值,分别对应三张图:






执行该方法,返回Point对象,类型从String转换Point完成,然后执行TestAction类的execute方法,如图:



执行完execute()方法后,struts2跳转到jsp页面,此时需要将Point类型转化为String类型,于是重新进入转换器类的convertValue方法,此时的toType(我们需要转换成的类型)是String类型,于是执行下图红框中的方法,





b) 全局转换器:

  i.  全局转换和局部转换的原理一样,不同的地方如下:

       1.全局转换的转换文件需要放在src下面;

       2.转换文件名称必须是:xwork-conversion.properties;

       3.如果全局转换文件在action包外面(通常情况下,action不会直接在src下,所以全局转换文件在action包外面的概率很大),需要指定action参数的具体路径,如:

Java.awt.Point=cn.edu.hpu.converter.MyPointConverter,

当然这里的配置如果是

p=cn.edu.hpu.converter.MyPointConverter

也可以正常找的到,

所以全局转换这两种配置都可以。



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值