struts2的类型转换是基于OGNL(对象图像导航语言)
1 OGNL里面有一个接口TypeConverter,该接口有一个方法convertValue,convertValue该方法很复杂,里面还有一个默认实现类DefaultTypeConverter,通过该类来实现类型转换
TypeConverter接口的实现类是DefaultTypeConverter,必须实现convertValue方法
2 继承StrutsTypeConverter,实现2个方法:convertFromString(...)和convertToString(...)
OGNL
步骤:
1 定义一个bean类,不需要任何继承,例如:public class Point{}
2 再定义一个转换类,需要继承DefaultTypeConverter, eg:public class PonitConver extends DefaultTypeConverter{}
3 局部或者全局properties, 局部eg:point="Point的类全名"
4 在Action中定义一个属性
5 Jsp页面跳转到Action
1 定义一个bean类,不需要任何继承,例如:public class Point{}
public class Point {
private int x,y;
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
@Override
public String toString() {
return "["+x+" , "+y+"]";
}
}
2 再定义一个转换类,需要继承DefaultTypeConverter, eg:public class PonitConver extends DefaultTypeConverter{}
public class PointConver extends DefaultTypeConverter{
@Override
public Object convertValue(Map<String, Object> context, Object value,Class toType) {
if(toType==Point.class){
//获得的是字符,需要转换成Point类型
String[] p=(String[])value;//获得很多的字符串数组
String[] pt=p[0].split(",");
Point point=new Point();
point.setX(Integer.valueOf(pt[0]));
point.setY(Integer.valueOf(pt[1]));
return point;
}else if(toType==String.class){
Point point=(Point)value;
return "["+point.getX()+" , "+point.getY()+"]";
}
return null;
}
}
参数说明:
Map context:配置的信息
value:传过来的参数
toTye:需要转换的类型
3 局部或者全局properties,
局部eg:point="Point的类全名": 有一个PointAction,所以局部properties的名称为:PointAction-conversion.properties,必须和PointAction放在同一个包下
point=com.amaker.conver.PointConver
全局eg:放在src下面
com.awaker.actions.PointAction=com.awaker.conver.PointConver
4 在Action中定义一个属性
public class PointAction extends ActionSupport {
public String execute() throws Exception {
System.out.println(point);
return SUCCESS;
}
Point point;
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
}
5 Jsp页面跳转到Action
<form action="login.action" method="post">
输入坐标:<input type="text" name="point"/><br/>
<input type="submit" value="确定">
</form>