第一种:使用DefaultTypeConverter转换
JSP页面
<s:textfield name="point" label="point"></s:textfield>
<s:textfield name="age" label="ages"></s:textfield>
<s:textfield name="username" label="usernames"></s:textfield>
<s:textfield name="date" label="birthdays"></s:textfield>
提交到相应的Action之后会读取和Action同目录的文件
ConverterAction-conversion.properties
point=com.langhua.converter.PointConverter
这样就会找到这个转换器
package com.langhua.converter;
import java.util.Map;
import com.langhua.bean.Point;
import ognl.DefaultTypeConverter;
public class PointConverter extends DefaultTypeConverter {
@Override
public Object convertValue(Map context, Object value, Class toType) {
//从页面转到服务器 toType表示要转化的类型
if(Point.class == toType){
//有可能收集的是数组所以是个String的数组
String[] values = (String[]) value;
String[] args = values[0].split(",");
Point point = new Point();
point.setX(Integer.parseInt(args[0]));
point.setY(Integer.parseInt(args[1]));
return point;
}
//从服务器转到页面
if(String.class == toType){
Point p = (Point) value;
return "["+p.getX()+","+p.getY()+"]";
}
return null;
}
}
调用里面的方法
然后跳转到相应的页面再调用里面的方法
<action name="pointconverter" class="com.langhua.action.ConverterAction">
<result name="success">/output.jsp</result>
</action>
最后在页面输出
point:<s:property value="point"/><br/>
age:<s:property value="age"/><br/>
username:<s:property value="username"/><br/>
brithday:<s:property value="date"/><br/>
第二种,全局转换
和struts.xml同目录下面加入这样一个文件
xwork-conversion.properties
里面指定
com.langhua.bean.Point=com.langhua.converter.PointConverter1
这样只要遇到Point类,就会使用后面的转换器转换
第三种使用struts2提供的类StrutsTypeConverter extends DefaultTypeConverter来转换
如下
package com.langhua.converter;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
import com.langhua.bean.Point;
public class PointConverter1 extends StrutsTypeConverter {
@Override
public Object convertFromString(Map context, String[] values, Class toClass) {
Point p = new Point();
String[] parms = values[0].split(",");
p.setX(Integer.parseInt(parms[0]));
p.setY(Integer.parseInt(parms[1]));
return p;
}
@Override
public String convertToString(Map context, Object o) {
Point p = (Point)o;
return p.toString();
}
}
第四种可以在页面写成这样
<s:textfield name="point.x" label="x"></s:textfield>
<s:textfield name="point.y" label="y"></s:textfield>
这样的话就不要什么配置文件了