ply

吞噬黑暗
posts - 1, comments - 11, trackbacks - 0, articles - 13
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

struts2的类型转换

Posted on 2011-09-15 14:39 ply 阅读(465) 评论(0)  编辑  收藏

web应用类型的转换分为两种情况:

1.从客房端的字符串到自定义类型的转换。

2.页面输出时从自定义类型到字符串的转换。

在struts2中分两种转换,一种是局部转换,另一种是全局类型转换。具体转换的实施需要一个转换类和一个自定义类。我们先来看局部类型转换。

局部类型转换

对于int等基本类型,struts2会自动完成类型转换,像age年龄,在输入页面是String型的,到Action后会自动转换成int型。而如果是转换成对象类型的话,就需要自定义类型转换。这样就需要一个自定义类。要定义一个转换类,需要继承ognl.DefaultTypeConverter这个类 ,这是个类型转换的类。代码如下:

 1 public class PointConverter extends DefaultTypeConverter{

 2     public Ojbect convertValue(Map context,Object value,Class tyType){//重写方法
 3         if(Point.class==toType){
 4             Point point = new Point();
 5             String[] str = (String[])value;//将String转换成类的代码处理
 6             return point;
 7          }
 8          if(String.class==toType){//说明由类转换成String
 9              Point point = (Point)value;//将类转成String的代码处理
10              return String型的一个变量;
11          }
12          return null;
13     }
14 }

方法对数说明:1、Map context  ——应用上正文

                    2、Object value ——是要进行类型转换的值。如果是从客户端到自定义的类,那么value是个字符串。注意:它是一个字符串的数组。因为:在表单中可以有多个文本域,而所有文本域可以是同一个名字,这时是考虑通用性而作为数组处理的。如果只有一个文本域,则数组只有一个元素,下标为0。注:jsp的servlet中接收多个相同名字的输入域用request.getParameterValues()方法。

                    3、class toType ——来指定向哪 一种类型转换,即是向类转换还是向客户端转换。

                    4、Point是一个类,即是我们的自定义类。不是系统内置的类型

 1 if(类.class == toType){//说明由客户端向类转换
 2     Point point = new Point();//向哪个类转换,就实例化这个类
 3     String[] str = (String[])value;//因为是由客户端向类转换,所以此时value是一个String[]数组
 4     String[] paramValues = str[0].split(",");
 5     //下面部分代码就是进行转换处理
 6 }
 7 if(String.class == toType){//说明由类向客户端的String转换,此时value是一个对象
 8     Point point = (Point)value;
 9     //下面部分的代码就是进行转换处理;
10 }

 自定义类、转换类、action都创建好之后,要通告struts2转换类在什么地方,并且告诉struts2是对谁进行转换。写一个文件:action文件名-conversion.properties,此属性文件要与action在同一包下,此文件说明对此action中的属性进行转化。

 文件中的内容如下:

point = 转换类名

 内容说明:

1、point是Action中的一个属性,转换类指明所使用哪个转换类对此属性进行转换

2、properties文件中的注释为“#”号,前面加“#”的行是被注释的

类型转换的流程

 1、用户进行请求,根据请求名在struts.xml中寻找Action

 2、在Action中,根据请求域中的名字去寻找对应的set方法。找到后在赋值之前会检查这个属性有没有自定义的类型转换。没有的话,按照默认进行转换;如果某个属性已经定义好了类型转换,则会去检查在Action同一目录下的 action文件名-conversion.properties 文件。

 3、从文件中找到要转换的属性及其转换类。

 4、然后进入转换类中,在此类中判断转换的方向。我们是先从用户请求开始的,所以这时先进入从字符串到类的转换。返回转换后的对象。流程返回Action。

 5、将返回的对象赋值给Action中的属性,执行Action中的execute()

 6、执行完execute()方法,根据struts.xml的配置转向页面

 7、在jsp中显示内容时,根据页面中的属性名去调用相应的get方法,以便输出

 8、在调用get方法之前,会检查有没有此属性的自定义类型转换。如果有,再次跳转到转换类当中。

 9、在转换类中再次判断转换方向,进入由类到字符串的转换,完成转换后返回字符串。

 10、将返回的值直接带出到要展示的页面当中去展示。


只有注册用户登录后才能发表评论。


网站导航: