2.Struts2的类型转换
- 当用户自定义Action继承ActionSupport时,可以使用ActionSupport很多功能
比如validate() 若在validate函数中调用addFieldError(String fieldName,String errorMessage)方法的话,既表示表单验证出错,会转向相应action中的 result name=”input” 所指定的页面,一般我们会指表单的提交页面,因为此方法会对相应表单控件指定错误信息,由方法名可知!fieldName对应提交数据的表单控件的name
- 类型转换
自己的转换类要继承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,比较合理