struts2学习笔记(四)全局数据类型转换.doc_第1页
struts2学习笔记(四)全局数据类型转换.doc_第2页
struts2学习笔记(四)全局数据类型转换.doc_第3页
struts2学习笔记(四)全局数据类型转换.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

struts2学习笔记(四)全局数据类型转换 前文讲到了局部数据类型转换,通过action类目录下的XAperties配置文件进行指定,在这种转换方法中,如果要对同一个Action类中多个数据类型进行转换,可在properties文件中多写几行,格式为:要转化的属性名 = 负责转化的Converter类(指定包名).注释符号为#但是如果有多个Action类都包含同一个数据类型且都要对该数据类型进行转换,那么按照局部类型转换的思想则需要配置多个XAperties文件,这样显然过于复杂且难于管理.在这种情况下就需要用到全局数据类型转换了.具体操作如下: 将先前Action类目录下的XAperties文件中的内容注释掉 在WEB-INF/classes目录下新建一个perties文件(在MyEclipse中可直接新建在src文件夹下),写上: 自定义类型的包名+类名 = 执行转换的类的包名+Converter类名,如: com.test.bean.Point=com.test.converter.PointConverter2.这样所在Action类在执行set和get方法时都要首先要读取classes 目录下的perties文件(如果存在),以确定当前的属性要不要执行类型转换,如果需要则调用properties文件指定的Converter类进行转换 ,这样就实现了全局的数据类型的转换. 在上一文中,我们写局部数据类型转换用到的PointConverter.java类是继承了DefaultTypeConverter类,在里面重写了public Object convertValue(Map context, Object value, Class toType)方法,用if(Point.class=toType)和if(String.class=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类中需要转换,则可以使用局部数据类型转换.方法point=com.test.converter.PointConverter3,这里的point为

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论