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)