struts2中的自定义类型转换有分两种
(0).编写类型转换文件
该文件应该继承SrtutsTypeConverter,当继承后,自动会有两个重写的方法,一个是convertFromString(从客户端到服务器),一个是convertToString(从服务器到客户端),我们要做的就是在这两个方法中编写你想要转换的类相应的代码.
(1).局部转换
局部转换就是在你需要类型转换的action的同目录下建立格式如:xxx-conversion.properties的文件
xxx代表你的action的名字,在properties中加入:
yyy=zzz
yyy代表action中你需要转换的成员变量,(注意yyy不是类型),zzz代表转换yyy所用的java(要写完整的相对路径如:com.test.converter.PointConverter)
局部转换就是针对某一个action;如果action中有多个同类型的成员变量,则需要写多行.如有
Point point,point1,point2;
则需要在xxx-conversion.properties中加入
point=com.test.converter.PointConverter
point1=com.test.converter.PointConverter
point2=com.test.converter.PointConverter
显然这样是很麻烦的.这时候我们就要用到全局转换了;
(2).全局转换
全局转换是针对某一个类的.我们需要在src目录下建立xwork-conversion.properties.
加入
yyy=zzz
yyy代表你的类型的相对路径,如com.test.bean.Point
zzz代表转换yyy所用的java,这里跟局部转换是一样的.如(com.test.converter.PointConverter)
finished!
Ps:struts2中还有一个很方便的功能.在下面全部不用用到任何转换.
如果有一个bean
public class Point {
private int x;
private int 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() {
// TODO Auto-generated method stub
return ""+x+"and"+y;
}
}
在你的jsp中可以这样写:
<s:form action="haha">
<s:textfield name="point.x" label="Point.x"></s:textfield>
<s:textfield name="point.y" label="Point.y"></s:textfield>
<s:submit value="submit"></s:submit>
</s:form>
注意两个textfield中的name.
然后在haha.java的action中有一个类型为Point的成员变量point.
在输出的页面中,我们可以写
<s:property value="point"/>
然后point会调用它的类中的toString方法.
所以我们就需要在Point类中重写toString方法.如上面所见;
或者,我们也可以这样写:
<s:property value="point.x"/>
<s:text name="and"></s:text>
<s:property value="point.y"/>
得到的结果是一样的.