Struts2类型转换

本文详细介绍了Struts2框架中的类型转换机制,包括局部类型转换和全局类型转换的配置方法,以及如何自定义转换处理类。通过示例展示了如何在表单提交的数据与后端bean属性类型不匹配时进行自动转换。

 

在HTML表单中的文本框里输入的不管是数值类型还是字符类型,最后都是以String类传到后台。如果后台bean的属性是int、double、Date等,struts2就会自动把字符类型转换成相应的类型。

一.局部类型转换 

1.名称格式:action类名+-conversion.properties
2.位置:放在与之相对应action类的同包下
3.properties文件内容格式:转换属性=转换处理类
4.转换处理类:继承StrutsTypeConverter实现convertFromString方法和convertToString方法
5.具体处理流程:
(1)输入:HTML表单提交—Action类处理—执行属性setter方法—如果需要类型转换—找到properties文件—按照properties设置找到对应的转换类,调用其中convertFromString转换方法-把返回值通过setter方法给action中属性赋值。
(2)输出:Action类处理—执行属性getter方法—如果需要类型转换—找到properties文件—按照properties设置找到对应的转换类,调用其中convertToString转换方法-把返回值通过getter方法输出到页面。

二.全局类型转换(页面中所有用到改bean的都会被类型转换)
1.名称格式:xwork-conversion.properties
2.位置:src根目录下
3.properties文件内容格式:bean类=转换处理类

三.主要代码
1、xwork-conversion.properties(全局)
#com.test.bean.Point=com.test.converter.PointConverter
2.PointAction-conversion.properties(局部)
#point=com.test.converter.PointConverter
#point2=com.test.converter.PointConverter
#point3=com.test.converter.PointConverter
#point=com.test.converter.PointConverter3

 

Java转换代码:

PointConverter.Java

package com.test.converter;

import java.util.Map;
import ognl.DefaultTypeConverter;
import com.test.bean.Point;

/**   
 * @author 作者:zlp E-mail: jxzlp123@163.com  
 * @version 创建时间:2010-9-12 下午01:21:30   
 * 类说明   
 */
public class PointConverter extends DefaultTypeConverter {

	@Override
	public Object convertValue(Map context, Object value, Class toType) {
		if(Point.class==toType)
		{
			Point point =new Point();
			String[] str=(String[])value;
			String[] paramValues=str[0].split(",");
			int x=Integer.parseInt(paramValues[0]);
			int y=Integer.parseInt(paramValues[1]);
			point.setX(x);
			point.setY(y);
			return point;
		}
		if(String.class==toType){
			
			Point point=(Point)value;
			int x=point.getX();
			int y=point.getY();
			String result="[x="+x+", y="+y+"]";
			return result;
		}
		
			return null;
		
	}
	
	
}

PointConverter2.Java

package com.test.converter;

import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

import com.test.bean.Point;

/**   
 * @author 作者:zlp E-mail: jxzlp123@163.com  
 * @version 创建时间:2010-9-12 下午07:52:22   
 * 类说明   
 */
public class PointConverter2 extends StrutsTypeConverter {

	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {
		Point point=new Point();
		String[] str=(String[])values;
		String[] paramValues=str[0].split(",");
		int x=Integer.parseInt(paramValues[0]);
		int y=Integer.parseInt(paramValues[1]);
		point.setX(x);
		point.setY(y);
		return point;
	
		
	}

	@Override
	public String convertToString(Map context, Object o) {
		
		Point point=(Point)o;
		int x=point.getX();
		int y=point.getY();
		String result="[ x = "+ x+", y ="+ y+"]";
		return result;
	}

}

PointConverter3.Java

package com.test.converter;

import java.util.ArrayList;

import java.util.List;
import java.util.Map;

import org.apache.struts2.util.StrutsTypeConverter;

import com.test.bean.Point;

/**   
 * @author 作者:zlp E-mail: jxzlp123@163.com  
 * @version 创建时间:2010-9-12 下午08:39:35   
 * 类说明   
 */
public class PointConverter3 extends StrutsTypeConverter {

	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {
		List<Point> list=new ArrayList<Point>();
		for (String value:values) {
			Point point=new Point();
			String[] paramValues=value.split(",");
			int x=Integer.parseInt(paramValues[0]);
			int y=Integer.parseInt(paramValues[1]);
			
			point.setX(x);
			point.setY(y);
			
			list.add(point);
			
			
		}
		return list;
		
	}

	@SuppressWarnings("unchecked")
	@Override
	public String convertToString(Map context, Object o) {
		List<Point> list = (List<Point>) o;
		StringBuilder sb = new StringBuilder();
		sb.append("[ ");
		int number = 0;
		for (Point point : list) {
			++number;
			int x = point.getX();
			int y = point.getY();
			sb.append(number).append(" x=").append(x).append(",y=").append(y)
					.append(" ");
		}
		sb.append("]");
		return sb.toString();
	}

}

 

在最后调用

<body>
   	 <h3><font color="red">用逗号将坐标分隔开</font></h3>
    <s:form action="pointConverter">
    	<s:textfield name="point.x" label="x"></s:textfield>
    	<s:textfield name="point.y" label="y"></s:textfield>
    	<s:textfield name="age" label="age"></s:textfield>
    	<s:textfield name="username" label="username"></s:textfield>
    	<s:textfield name="date" label="date"></s:textfield>
    	<s:submit name="submit" label="submit"></s:submit>
    </s:form>
    
  </body>

时 在javabean中重写toString()方法

@Override
 public String toString() {  
  return "x="+x+", y="+y;
 }

转载于:https://my.oschina.net/zlp5201/blog/404149

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值