Struts2类型转换

定义全局类型转换:
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 ;
	}

	
	
}

你可能感兴趣的:(java,struts)