您的位置:首页 > 编程语言 > Java开发

【SSH三大框架】Struts2基础第四篇:struts2自定义类型转换器

2014-08-28 22:12 113 查看

一、类型转换器定义:

众所周知,java有八大基本的类型,struts2能对这八大基本类型以及String、Date等常用类型提供自动转换。

但是,仅仅这些远远不能满足我们的需要。

原因:因为页面中的类型都是属于字符串类型的,而java是一种强类型语言,这时候我们需要把输入的字符串转型成为相应的类型。

在类型转换器的定义中也分为两种:

局部类型转换器:对某个action转换类型起作用。

全局类型转换器:对所有action转换类型起作用。

二、局部类型转换器:

这里用一个日期来举例子:

比如我们在页面输入20140828,如果Action类的属性是Date类型的,则它不能够正确接收到这个时间值。

如果我们输入2014-08-28,则Action类的Date类型的属性就可以正确接收到这个时间值。

所以,这个时候我们就需要用到类型转换了。

首先我们需要定义一个简单的Action类继承ActionSupport类:

package cn.action;

import java.util.Date;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport{
	private Date birthday;

	public Date getBirthday() {
		System.out.println("get:"+birthday);
		return birthday;
	}

	public void setBirthday(Date birthday) {
		System.out.println("set:"+birthday);
		this.birthday = birthday;
	}
	public String excute(){
		return SUCCESS;
	}
	
	
}


然后,我们需要去通过实现TypeCoverter接口或者继承DefaultTypeConverter实现类(该类实现了TypeCoverter接口)来实现自己的类型转换器(重写convertValue方法即可)。

package cn.type.Converter;

import java.util.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Map;

import com.opensymphony.xwork2.conversion.impl.DefaultTypeConverter;

public class DateTypeConverter extends DefaultTypeConverter {

	@Override
	public Object convertValue(Map arg0, Object value,Class toType) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
		try {
			
			if (toType == Date.class) {// 当字符串向Date类型转换时
				String[] params = (String[]) value;// Request.getParameterValues()
				System.out.println("value="+value);
				System.out.println("时间:"+dateFormat.parse(params[0]));
				return dateFormat.parse(params[0]);
			} else if (toType == String.class) {// 当Date转换成字符串时
				System.out.println(value);
				Date date = (Date) value;
				return dateFormat.format(date);
			}
		} catch (java.text.ParseException e) {
			e.printStackTrace();
		}
		return null;
	}
}


最后,我们需要把这个类型转换器注册到WEB应用上边:

在需要生效的Action类的包下新建ActionName-conversion.properties该文件,其中 ActionName是需要转换生效的Action的类名,后面的-conversion固定。

内容: 待转换的action中的属性名=类型转换器的全类名。 注意:类型转换器是需要加包名,而且最后不能加标点符号

如:date=com.DateTypeConvert

我们这里需要建立的是:HelloWorldAction-conversion.properties

birthday=cn.type.Converter.DateTypeConverter


这是项目的工程目录:



请忽视LoginAction.java这个文件,这个文件不是本次实验中的。

三、全局类型转换器:

局部类型转换器仅仅对指定的Action的指定属性进行转换。

全局类型转换器对所有Action的特定类型进行转换。

在src目录下新建xwork-conversion.properties,该文件的内容是待转换的类=转换器的名字,即com.shengsiyuan.bean.User=com.shengsiyuan.converter.UserConverter2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐