Struts2.0属性转换器的作用说明

Struts2的类型转换:
    一,局部类型转换(对某个action中的字段进行类型转换):
       1,写一个针对该action的要转换的字段的转换器,继承DefaultTypeConverter,重写convertValue方法
       2,在该action同一个目录下(同一包下)    新建一个xxx-conversion.properties文件。xxx是该action的类名
             规则:需要字段名=该字段的转换器
             如:  point=com.mengya.converter.PointConverter
                    ...(若还有其它的字段需要转化则继续写)
       3,这样写只能针对该action里的字段进行转换,其它的action不行,当然也可以配置其它的action的转换器
       4,对于字符串,数字,日期Struts2内置的类型转换。
      
    二,全局类型转换
        1,在src(即class下面)下面新建一个xwork-conversion.properties文件。
           规则:需要转换的类=该类的转换器
           如:com.mengya.util.Point=com.mengya.converter.PointConverter
      
    三,转换器:
        1,继承DefaultTypeConverter
           如:
            @Override
            public Object convertValue(Map context, Object value, Class toType) {
                // 要将字符串转换成point类
                if (toType == Point.class) {
                    String[] str = (String[]) value;
                    String paramValue = str[0];
                    String[] p = paramValue.split(",");
                    int x = Integer.parseInt(p[0]);
                    int y = Integer.parseInt(p[1]);
                    Point point = new Point();
                    point.setX(x);
                    point.setY(y);
                    return point;
                    // 要将point类转换成字符串
                } else if (toType == String.class) {
                    Point point = (Point) value;
                    return "X=" + point.getX() + " Y=" + point.getY();
                }
                return null;
            }
       
        2,继承StrutsTypeConverter
           如:
            // 从String转换成一个对象
            @Override
            public Object convertFromString(Map context, String[] value, Class toType) {
                String paramValue = value[0];// 取第一个元数,因为页面没有相同的字段名
                String[] params = paramValue.split(",");// 将","把用户所输入的字符串分隔开,即取得x与y的值
                int x=Integer.parseInt(params[0]);
                int y=Integer.parseInt(params[1]);
                Point p=new Point();
                p.setX(x);
                p.setY(y);
                return p;
            }
       
            // 从一个对象转换成一个字符串
            @Override
            public String convertToString(Map context, Object value) {
                Point p=(Point) value;
                return "[X="+p.getX()+",Y="+p.getY()+"]";
            }
    四,集合类型属性转换器,如action中有一个集合类型的属性也可以进行转换
        public class PointListConverter extends StrutsTypeConverter {
          // 从String[]转换成List<Point>
          @Override
          public Object convertFromString(Map context, String[] value, Class toType) {
            List<Point> pointList = new ArrayList<Point>();
            for (String str : value) {
              Point p = new Point();
              String[] s = str.split(",");
              p.setX(Integer.parseInt(s[0]));
              p.setY(Integer.parseInt(s[1]));
              pointList.add(p);
            }
            return pointList;
          }
       
          // 从List<Point>集合转换成Stirng
          @Override
          public String convertToString(Map context, Object toType) {
            List<Point> pointList = (List<Point>) toType;
            String value = "";
            for (int i = 0; i < pointList.size(); i++) {
              value = value + "[X=" + pointList.get(i).getX() + ",Y=" + pointList.get(i).getY() + "]";
            }
            return value;
          }
   
       }       
    五,说明:若action有一个point属性在jsp页面可以这样自己赋值:
        <s:textfield name="point.x" label="X"></s:textfield>
        <s:textfield name="point.y" label="Y"></s:textfield>             

你可能感兴趣的:(jsp)