Strust2其实基础数据类型,如int,long,String...之类的东西已经内部实现转换了,如果自己有特殊需求,需要转换一个对象出来的话,就需要自己实现类型的转换。
如A页面有一输入框需要提交一个长方形的对象(该对象有高度和宽度属性)到RectAction中,并且在页面B中显示该长方形的属性。
结构:
WEBROOT ->A页面,B页面
ClassPath->com.test.bean.Rect , com.test.action.RectAction , com.test.action包下RectAction-conversion.properties , com.test.converter.RectConverter
如图:
首先是A页面输入了长方形的属性(60,80),提交给RectAction后,Struts2会在调用Set方法之前检测一下是否有conversion的属性文件,如果有,则进行类型转换。
A页面如下:
B页面如下:
第一步建立BO业务逻辑对象com.test.Rect类代码:
第二步建立com.test.action.RectAction代码:
第三步建立类型转换配置文件,局部类型转换则在com.test.action包下RectAction-conversion.properties内容如下:
rect=com.test.converter.RectConverter(表示RectAction下的rect属性将进行类型转换)
或者建立全局的类型转换配置文件,在classes下建立xwork-conversion. properties内容如下:
com.test.bean.Rect=com.test.converter.RectConverter(表示只要所有的Action类中有Rect属性的都将进行类型转换)
注意:当全局和局部并存的时候,局部的优先级别比全局的更高。
第四步建立com.test.converter.RectConverter代码:
上面是继承自DefaultTypeConverter类,上面需要自己判断toType究竟是客户端到服务端还是服务端到客户端。Struts2还提供了一个更简单的类型转换抽象类StrutsTypeConverter。代码如下:
---------------------------------------------------------------------------------------------------------------------
如上写了一大堆的代码,有没有更简单的方法呢?
是有的!
在A页面里可以这样写了以后系统会自动的将rect的width和height进行赋值,并且将rect对象的toString返回给B页面,这样就可以省略converter了:
今日题目:如果要转换的是一个长方形对象集合呢?该如何做呢?大家想想吧。