struts的自定义类型转换

struts有一套完整的类型转换机制。但在实际应用中我们有时也需要定义自己的类型转换器。下面说一下如何实现自定义类型转换器

一、局部的类型转换

首先要有一个目标类型。可以是自定义的类型如Point也可以j2se中已有的类型如:Date
举例
public class Point{
  private int x;
  private int y;
  //.......
}

当用户在客户端输入类似"3,4"的字符串时。由类型转换器自动转开型为x=3,y=4的Point对象

第二步,要一个类型转换器
要写一个继承ognl.DefaultTypeConverter的类比如
public class PointConverter extends DefaultTypeConverter{
  //一定要重写这个方法
  @Override
  public void convertValue(Map context,Object value,Class toType){
    //由客户端字符中向point转换
    if(toType==Point.class){
      Point point = new Point();
      String str = (String)value;
      String[] values = strs.split(",");//将输入的值分割为数组
      int x = Integer.parseInt(values[0]);
      int y = Integer.parseInt(values[1]);
      point.setX(x);
      point.setY(y);
      return point;
      
    }
    //由服务端向客户端输出成字符串
    if(toType==String.class){ 
      Point point = (Point)value;
      int x = point.getX();
      int y = point.getY();
      String str = "x="+x+",y="+y;
      return str;
    }
    return null;
  }
}


第三步:需作类型转换的类型必须为一个action的属性。比如:
public class PointAction{
  private Point point;//jsp中应有一个<s:textfield name="point"/>来接收客户输入
  //........
}


第四步,配置属性文件,让struts调用类型转换器进行工作:
PointAction-convertion.properties:
引用

point=com.mypack.PointConverter


注意,这个properties文件一定要与PointAction.java在同一目录下。且文件名的前半部分与action同名,后面都是固定写法。
当完成以上步骤后,整个类型转换的工作就完成了。测一下吧。。


二、全局的类型转换

上面其实是一个局部的类型转换。下面讲讲全局的。
首先要在classpath(IDE中就是src目录下)建一个固定名为xwrok-conversion.properties.例如:
com.mypackage.Point = com.mypack.PointConverter


这里要讲全局与局部的区别:
1、配置文件名:全局的只有一个叫xwork-conversion.proterties 局部的则由action名+“-conversion.proterties”组成
2、配置文件路径:全局的在类路径的根下。局部的与action路径一至
3、配置文件数量:全局只有一个。局部的根据action的多少,可能多个
4、全局配置中key为完整的类型名,如com.mypack.Point.局部的则是action中的属性名

三、利用struts框架快速开发类型转换器
上面的局部类型转换器是继承ognl.DefaultTypeConverter.其实struts对些作了封装,提供了一个更方便的抽象类org.apache.struts2.util.StrutsTypeConverter
我们的类型转换器只要继承StrutsTypeConverter并实现它提供的抽象方法即可。

你可能感兴趣的:(应用服务器,jsp,struts,J2SE,ide)