资源预览内容
第1页 / 共5页
第2页 / 共5页
第3页 / 共5页
第4页 / 共5页
第5页 / 共5页
亲,该文档总共5页全部预览完了,如果喜欢就下载吧!
资源描述
struts2学习笔记(四)全局数据类型转换 前文讲到了局部数据类型转换,通过action类目录下的XAction-conversion.properties配置文件进行指定,在这种转换方法中,如果要对同一个Action类中多个数据类型进行转换,可在properties文件中多写几行,格式为:要转化的属性名 = 负责转化的Converter类(指定包名).注释符号为#但是如果有多个Action类都包含同一个数据类型且都要对该数据类型进行转换,那么按照局部类型转换的思想则需要配置多个XAction-conversion.properties文件,这样显然过于复杂且难于管理.在这种情况下就需要用到全局数据类型转换了.具体操作如下: 将先前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 目录下的xwork-conversion.properties文件(如果存在),以确定当前的属性要不要执行类型转换,如果需要则调用properties文件指定的Converter类进行转换 ,这样就实现了全局的数据类型的转换. 在上一文中,我们写局部数据类型转换用到的PointConverter.java类是继承了DefaultTypeConverter类,在里面重写了public Object convertValue(Map context, Object value, Class toType)方法,用if(Point.toType)和if(String.toType)来决定转换的方向.而在实际的项目开发中一般不会这样来写,而是用PointConverter.java去继承StrutsTypeConverter类,在子类中重写StrutsTypeConverter类的public Object convertFromString(Map context, String values, Class toClass)方法和public String convertToString(Map context, Object o)方法.方法中参数context为上下文信息,convertFromString是将客户端发进来字符串形式的数据转化为自定义的对象,其参数values为一个字符串数组,(如果是一个字符串则是长度为一的字符串数组,以字符串数组的形式写出是为了增加程序的通用性).convertToString方法是将对象转化为字符串并用于显示页面的输出.如此转换的类的代码:-/ PointConverter2.javapackage com.test.converter;import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;import com.test.bean.Point;public class PointConverter2 extends StrutsTypeConverter Override public Object convertFromString(Map context, String values, Class toClass) Point point=new Point(); String paramValues = values0.split(,); int x=Integer.parseInt(paramValues0); int y=Integer.parseInt(paramValues1); point.setX(x); point.setY(y); return point; Override public String convertToString(Map context, Object o) Point point = (Point)o; int x=point.getX(); int y=point.getY(); String result=x=+ x+, y=+y+ this is processed by PointConverter2.java!; return result; - 到此我可以进一步修改我们一直使用的那个实例,如果要在一个页面中输入多个点的信息,则我们需要多个textField组件来进行输入, 这样在Action类中就需要这样写了: private Point point; private Point point2; private Point point3;如此就需要过多的set和get方法了,但是利用全局数据类型可以方便进行转换.联想到JAVA1.5的新特性,我们可以使用泛型.如此我们就可以改写input.jsp: 在Action类中为为private List point;生成了SET和GET方法如下:public List getPoint() return point; public void setPoint(List point) this.point = point; 这样我必须重写Converter类了,重写后的代码如下:-/PointConverter3.javapackage com.test.converter;import java.util.ArrayList;import java.util.List;import java.util.Map;import org.apache.struts2.util.StrutsTypeConverter;import com.test.bean.Point;public class PointConverter3 extends StrutsTypeConverter Override public Object convertFromString(Map context, String values, Class toClass) List list=new ArrayList();/初始泛型数组 for(String value : values)/遍历values数组 String paramValues=value.split(,);/将values中的一项按逗号分成数组 Point point=new Point();/转化成一个Point对象 int x=Integer.parseInt(paramValues0); int y=Integer.parseInt(paramValues1); point.setX(x); point.setY(y); list.add(point); return list; Override public String convertToString(Map context, Object o) StringBuilder result=new StringBuilder(); List list=(List)o; int number=0; result.append( ); for(Point point : list) +number; int x=point.getX(); int y=point.getY(); result.append(number).append( x= ).append(x).append( y= ).append(y); result.append( ); return result.toString(); -关于配置:如果这种类型只是在一个Action
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号