2.Struts2的类型转换

  1. 当用户自定义Action继承ActionSupport时,可以使用ActionSupport很多功能

比如validate() 若在validate函数中调用addFieldError(String fieldName,String errorMessage)方法的话,既表示表单验证出错,会转向相应action中的 result name=”input” 所指定的页面,一般我们会指表单的提交页面,因为此方法会对相应表单控件指定错误信息,由方法名可知!fieldName对应提交数据的表单控件的name

 

  1. 类型转换

自己的转换类要继承StrutsTypeConverter实现里面的两个抽象方法convertFromString(Map context,String[]values,Class toClass)和converToString(Map context,Object o)方法 第一个方法中的String[]values是指form表单中的name属性相同的控件提交的字符串数组,如果对应name只有一个,则只取第一个元素.对于局部的类型转换则转换的配置文件放在与自定义的Action的类字节码文件放在一个包下面,并且名子为自定义的Action类名加上-conversion.properties如:SelfAction-conversion.properties   并且在配置文件中写上要转换属性的相应的转换类!而全局的类型转换文件则为:xwork-conversion.properties配置文件中写要转换的全局类及其转换类如下:

package edu.yzu.entity;

 

public class Point {

    private double x;

    private double y;

    public double getX() {

        return x;

    }

    public void setX(double x) {

        this.x = x;

    }

    public double getY() {

        return y;

    }

    public void setY(double y) {

        this.y = y;

    }

}

 

package edu.yzu.action;

import com.opensymphony.xwork2.ActionSupport;

public class TestConversionAcion extends ActionSupport {

private Point pone;

private Point ptwo;

public Point getPone() {

    return pone;

}

public void setPone(Point pone) {

    this.pone = pone;

}

public Point getPtwo() {

    return ptwo;

}

public void setPtwo(Point ptwo) {

    this.ptwo = ptwo;

}

@Override

public String execute() throws Exception {

    return this.SUCCESS;

}

@Override

public void validate() {

    super.validate();

}

}

 

如果要将自定义的Action中的两个属性pone 和ptwo转换过来则需要写如下转换类:

package edu.yzu.action;

 

import java.util.Map;

 

import org.apache.struts2.util.StrutsTypeConverter;

 

import edu.yzu.entity.Point;

 

public class PointConvert extends StrutsTypeConverter {

 

    @Override

    public Object convertFromString(Map map, String[] values, Class toClass) {

        String[]xy=values[0].split(",");

        double x=Double.parseDouble(xy[0]);

        double y=Double.parseDouble(xy[1]);

        Point p=new Point();

        p.setX(x);

        p.setY(y);

        return p;

    }

 

    @Override

    public String convertToString(Map map, Object o) {

        Point p=(Point)o;

        return "["+p.getX()+" , "+p.getY()+"]" ;

    }

 

}

 

局部类转文件名为:TestConversionAction-conversion.properties

内容为:pone=edu.yzu.action.PointConvert

ptwo=edu.yzu.action.PointConvert

全局为:xwork-conversion.properties

内容为:edu.yzu.entity.Point=edu.yzu.action.PointConvert

 

对于一些简单的类型则struts2会自动进行类型转换。如int double float Date等常用类型

对于int 转换不成功则会自动赋值为0,这显然有时并不太合理(但也很无奈)。Date则为null,比较合理

posted @ 2010-05-03 16:56  沉兮  阅读(351)  评论(0编辑  收藏  举报