类型转换
1. 在servlet中,如果表单进行非字符串数据提交的时候,需要进行类型转换,如提交年龄(age)。
2. 在struts2中,常见数据类型struts2已经自动的进行了类型转换,无需进行手动转换。
3. 在某些情况下,有自定义类型时,struts2不能完成类型转换,那么需要手动转换,如果该自定义类型使用的频率较高时,手动转换重复代码将会增多,可以使用struts2提供的类型转换器来进行类型转换。
4. 案例:如坐标点(x,y)进行转换的步骤如下:
a) 编写类型转换器,继承StrutsTypeConverter类
b) 编写 xwork-conversion.propertie配置文件,放于src目录下,内容为要转换的类型=类型转换器
5. 使用类型转换来完成上述案例
类型转换器:
publicclass PointConverter extends StrutsTypeConverter{ /** * 将表单提交的字符串数据转换为自定义数据类型 * arg0: 是ActionContext * arg1: 是要进行类型转换的字符串数组 * arg2: 是被转换的类型 */ public Object convertFromString(Map arg0, String[] arg1, arg2) { String value=arg1[0]; //获取值栈中的值 Point point=new Point(); String x=value.substring(1,value.indexOf(",")); String y=value.substring(value.indexOf(",")+1,value.length()-1); point.setX(Integer.parseInt(x)); point.setY(Integer.parseInt(y)); returnpoint; } /** * 将自定义的类型转换为字符串在前台显示----通过ognl表达式将会只用该方法进行转换上 * arg0: ActionContext * arg1: 要转换的对象 */ public String convertToString(Map arg0, Object arg1) { Point point=(Point)arg1; return"("+point.getX()+","+point.getY()+")"; } } |
xwork-conversion.properties配置文件
com.zys.system.model.Point=com.zys.converter.PointConverter |
Action
publicclass PointAction { private Point point;
public Point getPoint() { returnpoint; } publicvoid setPoint(Point point) { this.point = point; } public String execute(){ return"success"; } } |
struts.xml
<action name="point" class="com.zys.action.PointAction"> <result name="success">/show.jsp</result> </action> |
point.jsp页面
<body> <form action="point.action" method="post"> point:<input type="text" name="point"/> <input type="submit" value="提交"/> </form> </body> |
show.jsp页面
<body> 点:${point }<br> 点:<s:property value="point"/> </body> |