快速业务通道

Struts2类型转换(一) 常规类型,自定义类型,错误处理 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24

Struts2类型转换(一) 常规类型,自定义类型,错误处理

时间:2010-01-06 javaeye elf8848

Struts2的类型转换是基于OGNL表达式的.有良好的扩展性.

WEB应用接收到表单提交的数据都 是String类型的,Struts2可方便的转换为 常规类型(数值,日期)/ 自定义类型(User,Point类).

如果转换中出现异常,conversionError拦截器会自动处理该异常.

一, 常规类型的转换:

比如表单提交的信息有 用户名,生日, 年龄, Action中对应的数据类型分别是 String, Date, int.没什么好说的, Struts2会自动完成.

Struts2内建了常用的类型转换器,如String,boolean,char,int,long,float,double,Date, 数组(假定元素是String类型), 集合(假定元素是String 类型,用ArrayList封装)

二,自定义类型的转换(方法一): 这种方法用用来转换复杂对象

ONGL项目中有一个TypeConverter接口,是实现转换器必须实现的接口,这个接口有点复杂,所以OGNL还 提供了该街接口的一个实现类ognl.DefaultTypeConverter,通过继承该类重写convertValue方法,实 现自定义类型的转换.

方法是这样的convertValue(final Map context, final Object value, final Class toType)

第一个参数:context 是类型转换环境的上下文

第二个参数 : value 是须要转换的参数,方向不同,value的类型也是不同的.

第三个参数 : toType是转换后的 目标类型,

返回值是 : 转换后的目标类型, 方向不同,类型也是不同的.

Struts2自己有一 个抽象类继承自 DefaultTypeConverter类,是StrutsTypeConverter.就是转换的两个分别对应两个抽象 方法, 其实都一样,换汤不换药,百变不离其中.所以我们也可以继承 StrutsTypeConverter类.

下 面做一个自定义类型转换的实例:

1.表单是这样的: 输入一个用 豆号分隔的两 个数字, 代表一个坐标点的X,Y值.

2.Point 对象如下,用来封装表单信息.

Java代码

package ssh.org.util; public class Point { private int x; private int y; }

Java代码

public class LoginAction extends ActionSupport { private Point point; set,get方法略... @Override public String execute()throws Exception { return "success"; } }

Struts2类型转换(一) 常规类型,自定义类型,错误处理(2)

时间:2010-01-06 javaeye elf8848

3.实现自定义类型转换器,我们自己写一个转换类PointConverter

Java代码

package ssh.org.util; import java.util.Map; import ognl.DefaultTypeConverter; public class PointConverter extends DefaultTypeConverter { @Override public Object convertValue(final Map context, final Object value, final Class toType) { if (Point.class == toType)//从表单字符串转换为 Point对象 { final Point point = new Point(); final String[] str = (String[])value; final String[] param = str[0].split(","); final int x = Integer.parseInt (param[0]); final int y = Integer.parseInt(param[1]); point.setX(x); point.setY(y); return point; } if (String.class == toType)//从对象转换为字符串 { final Point point = (Point)value; final int x = point.getX(); final int y = point.getY(); final String result = "[x=" + x + ",y=" + y + "]"; return result; } return null; } }

4.把上面的类型转换器PointConverter注册在struts2应用中,Struts2框架才可以正常 使用该 转换器.

有3种方法,任选其中一种就行.

1)注册局部类型转换器,假定请求 的LoginAction 来处理 ,我们就要篇写LoginAction-conversion.properties文件.本文件要与 LoginAction.java放再同一文件夹

Properties代码

#本文件名

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号