1、自定义类型转换器:
经典错误提示:(HTTP Status 404 - No result defined for action com.liu.action.PointAction and result input)
原因:(1)类型转换有问题;(2)数据校验有问题 (当所需要的数据转换不是在基本数据类型中,就要自己定义转换器)
2、案例(从一个文本框中输入 12,52 将得到的值赋值在实体对象上)
jsp页面:
<form action="point.action" method="post">
请输入坐标<input type="text" name="myPoint" />(x,y)<br/>
<input type="submit" value="提交"/>
</form>
实体类:
public class MyPoint {
private int x;
private int y;
...setter() getter()
}
action类:
public class PointAction extends ActionSupport {
private MyPoint myPoint;
public String execute() throws Exception {
System.out.println("横坐标:"+myPoint.getX()+",纵坐标:"+myPoint.getY());
return this.SUCCESS;
}
public MyPoint getMyPoint() {
return myPoint;
}
public void setMyPoint(MyPoint myPoint) {
this.myPoint = myPoint;
}
}
3、自定义拦截器转换:
方式一:
/**
* 转换器的定义:
* 1、实现 TypeConverter
* 2、继承 DefaultTypeConverter
* 3、实现 StrutsTypeConverter
* @author Administrator
*
*/
public class MyPointConverter extends DefaultTypeConverter {
public Object convertValue(Map context, Object value, Class toType) {
if(toType==MyPoint.class){
String[] params=(String[]) value;//得到客户端传过来的值
String[] param=params[0].split(",");//获取一个文本框里面的值,按需求进行处理(如按照 ,分开)
int x=Integer.parseInt(param[0]);
int y=Integer.parseInt(param[1]);
MyPoint myPoint=new MyPoint();
myPoint.setX(x);
myPoint.setY(y);
return myPoint;//返回转换好的结果
}
return "转换出错";
}
}
方式二:
public class ColorConverter extends StrutsTypeConverter {
public Object convertFromString(Map arg0, String[] arg1, Class arg2) {
Color color=new Color();
String[] param=arg1[0].split(",");
int red=Integer.parseInt(param[0]);
int green=Integer.parseInt(param[1]);
int blue=Integer.parseInt(param[2]);
color.setRed(red);
color.setGreen(green);
color.setBlue(blue);
return color;
}
public String convertToString(Map arg0, Object arg1) {
return null;
}
}
4、配置转换器:
4.1(局部)针对那个action的实体类转换,放在action同包下
myPoint(实体类命)=com.liu.converter.MyPointConverter(转换全类名)
4.2(全局)所有的都可以使用,放在src
com.liu.entity.MyPoint=com.liu.converter.MyPointConverter