资源描述:
《struts2学习笔记(四)全局数据类型转换》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、struts2学习笔记(四)全局数据类型转换 前文讲到了局部数据类型转换,通过action类目录下的XAction-conversion.properties配置文件进行指定,在这种转换方法中,如果要对同一个Action类中多个数据类型进行转换,可在properties文件中多写几行,格式为:要转化的属性名=负责转化的Converter类(指定包名).注释符号为#但是如果有多个Action类都包含同一个数据类型且都要对该数据类型进行转换,那么按照局部类型转换的思想则需要配置多个XAction-conversion.properties文件,这样显然过于复杂且难于管理.在这种情况下就需要用到
2、全局数据类型转换了.具体操作如下: 将先前Action类目录下的XAction-conversion.properties文件中的内容注释掉 在WEB-INF/classes目录下新建一个xwork-conversion.properties文件(在MyEclipse中可直接新建在src文件夹下),写上:自定义类型的包名+类名=执行转换的类的包名+Converter类名,如:com.test.bean.Point=com.test.converter.PointConverter2.这样所在Action类在执行set和get方法时都要首先要读取classes 目录下的x
3、work-conversion.properties文件(如果存在),以确定当前的属性要不要执行类型转换,如果需要则调用properties文件指定的Converter类进行转换,这样就实现了全局的数据类型的转换. 在上一文中,我们写局部数据类型转换用到的PointConverter.java类是继承了DefaultTypeConverter类,在里面重写了publicObjectconvertValue(Mapcontext,Objectvalue,ClasstoType)方法,用if(Point.class==toType)和if(String.class==toType)来决定转
4、换的方向.而在实际的项目开发中一般不会这样来写,而是用PointConverter.java去继承StrutsTypeConverter类,在子类中重写StrutsTypeConverter类的publicObjectconvertFromString(Mapcontext,String[]values,ClasstoClass)方法和publicStringconvertToString(Mapcontext,Objecto)方法.方法中参数context为上下文信息,convertFromString是将客户端发进来字符串形式的数据转化为自定义的对象,其参数values为一个字符串数组
5、,(如果是一个字符串则是长度为一的字符串数组,以字符串数组的形式写出是为了增加程序的通用性).convertToString方法是将对象转化为字符串并用于显示页面的输出.如此转换的类的代码:-------------------------------------------------------------------------------------------------//PointConverter2.javapackagecom.test.converter;importjava.util.Map;importorg.apache.struts2.util.StrutsTy
6、peConverter;importcom.test.bean.Point;publicclassPointConverter2extendsStrutsTypeConverter{ @Override publicObjectconvertFromString(Mapcontext,String[]values,ClasstoClass){ Pointpoint=newPoint(); String[]paramValues=values[0].split(","); intx=Integer.parseInt(paramValues[0]);
7、 inty=Integer.parseInt(paramValues[1]); point.setX(x); point.setY(y); returnpoint; } @Override publicStringconvertToString(Mapcontext,Objecto){ Pointpoint=(Point)o; intx=point.get