定义全局类型转换:
xwork-conversion.properties文件
key-value
(需要转换的对象类的全名:包名+类名) =(转换类)
org.lx.struts2.bean.Point = org.lx.struts2.converter.PointConverter
限定类型转换:
属性文件命名规则- 例,若有XxxAction类里面包含属性 Point类型point字段
那么属性文件应放在与XxxAction同一目录下,命名为:XxxAction-conversion.properties
key-value
(需要转换的字段名) = (转换类)
point = org.lx.struts2.converter.PointConverter
转换类要求:
命名规则 - XxxConverter.java
需要继承自ognl.DefaultTypeConverter 该类在struts2的ognl-xx版.jar包中
package org.lx.struts2.converter;
import org.lx.struts2.bean.Point;
import java.lang.reflect.Member;
import java.util.Map;
import ognl.DefaultTypeConverter;
public class PointConverter extends DefaultTypeConverter {
@Override
public Object convertValue(Map context, Object target, Member member,
String propertyName, Object value, Class toType) {
//判断是否要转换为Point类型(toType是要转换的类型)
if(Point.class == toType){
Point point = new Point() ;
//接受参数,因为提交的参数中可能有很多相同name属性的参数
//例如:(所以选择使用数组接受) name="ch" 不止一个
//<s:checkbox name="ch" label="北京"></s:checkbox>
//<s:checkbox name="ch" label="上海"></s:checkbox>
String[] str = (String[]) value ;
String[] paramValues = str[0].split(",") ;
point.setX(Integer.parseInt(paramValues[0])) ;
point.setY(Integer.parseInt(paramValues[1])) ;
return point ;
}
//判断是否转换为String类型
if(String.class == toType){
Point point = (Point) value ;
StringBuffer buf = new StringBuffer() ;
buf.append("x=").append(point.getX()).append(" , ").append("y=").append(point.getY()) ;
return buf.toString() ;
}
return null ;
}
}