Servlet用表单提交非字符串数据的时候,需要进行类型转换:如提交 age
String strAge = req.getParameter("age");
int age=0;
if(strAge!=null){
age=Integer.parseInt(strAge);
}
struts2 中,常见数据类型 struts2 已经自动的进行了类型转换。不需要进行手动转换。
在某些情况下,有自定义的类型时,struts2 不能完成类型转换,那么需要手动转换,如果该自定义类型使用的频率较高时,手动转换重复代码将会增多--使用 struts2 提供的类型转换器来进行类型转换。
案例:a,b
不进行类型转换的处理方式:
Jsp页面代码:
<body>
<form action="point.action" method="post">
a:<input type="text" name="point.a"/><br>
b:<input type="text" name="point.b"/><br>
<input type="submit" value="提交"/>
</form>
</body>
Action 代码:
public class PointAction {
private Point point;
public String execute(){
System.out.println(point.getX()+"-----"+point.getY());
return Action.SUCCESS;
}
public Point getPoint() {
return point;
}
public void setPoint(Point point) {
this.point = point;
}
}
Struts.xml 配置
<package name="default" namespace="/" extends="struts-default">
<action name="point" class="cn.sxt.action.PointAction">
<result>/index.jsp</result>
</action>
</package>
这种方式不符合数学的表示形式;采用类型转换的处理:
使用类型转换的步骤:
a) 编写类型转换器--继承 StrutsTypeConverter 类
b) 编写 xwork-conversion.properties 的配置文件,放于 src 下;内容为
要转换的类型=类型转换器
使用类型转换来完成上述案例:
类型转换器:
public class PointConverter extends StrutsTypeConverter{
/**
* 将表单提交的字符串数据 转换为 指定自定义类型
* context 是 ActionContext
* values 要进行类型转换的字符串数组
* toClass 被转换的类型
* */
@Override
public Object convertFromString(Map context, String[] values,
Class toClass) {
String value=values[0];
Point point = new Point();
String x = value.substring(1,value.indexOf(","));
String
y=value.substring(value.indexOf(",")+1,value.length()-1);
System.out.println("x="+x);
System.out.println("y="+y);
point.setX(Integer.parseInt(x));
point.setY(Integer.parseInt(y));
return point;
}
/**
* 将定义类型 转换为字符串在前台页面显示----通过 ognl 表达式将会使
用该方法进行转换
* context ---actionContext
* o 要转换的对象
* */
@Override
public String convertToString(Map context, Object o) {
Point point = (Point)o;
return "("+point.getX()+","+point.getY()+")";
}
}