Struts2学习——(十二)Struts2类型转换

类型转换我们在之前的开发中多多少少已经用到了。前台页面中传递到后台的信息是以字符串的形式,而在后台中Java是强类型的语言,因此需要进行类型转换。

Struts2是MVC框架的良好实现,故其内部提供了这种类型的转换机制。当参数传入框架,通过param拦截器将传进来的值映射成属性并完成数据类型转换,同时把值放在ValueStack中,最后在页面中可以通过<s:property />取得值栈中的值。

一般来说,int、float、double、date、list、set、map往往都可以通过其内建的转换器完成类型转换。

Struts2提供了简单的方法使得我们可以自建转换器。

首先是自己的转换器:(举例)

public class RectangleConverter extends DefaultTypeConverter {

	@Override
	public Object convertValue(Object value, Class toType) {
		// TODO Auto-generated method stub
		if (toType == Point.class) {
			Point r = new Point();
			String[] tmp2 = (String[]) value;
			String[] tmp = tmp2[0].split(",");    //只提取第一个提交的值
			r.x = Integer.parseInt(tmp[0]);
			r.y = Integer.parseInt(tmp[1]);

			return r;
		}

		if (toType == String.class) {
			return value.toString();
		}
		return super.convertValue(value, toType);
	}

}
当需要转换为Point类时,且此时的传入参数格式不符合Struts2自身的转换规则的话(比如在此处用“r=3,2”),会进入这个转换器。

首先将value转换为一个字符串数组(debug发现,一传入value就是一个字符串数组),之后读取传入的字符串“3,2”并利用split分割为两部分,分别赋值给x,y创建一个新的point对象并返回。

需要注意的是,这里仅仅需要convertValue方法的覆写,具体的转换规则完全是自己写的,不必拘泥于此例。


之后注册转换器:

①注册局部转换器:

在用到该转换器的action的同包下创建“action名-conversion.properties”文件

对象名 = 转换器类全名

user.r=cn.wqy.converter.RectangleConverter

需要注意的时,在这里的“user.r”一定不能掉!因为在工程中我已经将user包装成了一个类,在action中只有user对象的getter、setter方法,jsp页面中也是赋值给“user.r”,因此这里一定要注意!

②创建全局转换器:

在src文件夹下创建“xwork-conversion.properties”文件

对象所属类全名 = 转换器类全名

java.awt.Point=cn.wqy.converter.RectangleConverter


一般来说,都是使用全局转换器较多。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值