`
在水伊方
  • 浏览: 107277 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Struts2中的类型转换器

阅读更多

在html表单中的文本框里输入的不管是数值类型还是字符类型,最后都是以String类传到后台。如果后台bean的属性是int、double等,Struts2就会自动把字符类型转换成相应的类型。但是对于复杂类型如日期类型,那么Struts2不会自动进行类型转换,这时就需要我们自己动手编写一个Converter类进行类型转换。

 

Struts中有两种类型转换器,分别是局部类型转换器和全局类型转换器

1.局部类型转换器:

要编写一个类型转换器:首先需要编写一个转换类实现TypeCoverter接口,或者继承DefaultTypeConverter实现类(该类实现了TypeCoverter接口),下面我们对日期类型转换编写一个DateTypeConverter类,代码如下:

package com.struts.converter;

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

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

public class DateTypeConverter extends DefaultTypeConverter {
	public Object convertValue(Map<String, Object> context, Object value, Class toType) {
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
		try {
			if(toType == Date.class) {	//字符串型转换为日期型
				String[] params = (String[]) value;  //request.getParameterValues();
				return dateFormat.parse(params[0]);
			} else if(toType == String.class) {	 //日期型转换为字符串型
				Date date = (Date) value;
				return dateFormat.format(date);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}
}

  然后我们需要对类型转换器进行注册,编写一个properties文件

名称格式为:actionName-conversion.properties,actionName为你需要类型转换的那个action的类名,后面为固定格式

内容格式为:转换属性=转换处理类,如:birthday=com.struts.converter.DateTypeConverter,注意转换处理类需要带上包名,最后把该文件放在与之相对应action类的同一个包下

 

2.全局类型转换器:

局部类型转换器只能对同一个包下的action类起作用,要想对所有的日期类型进行转换,则需要使用全局类型转换器,这里全局所需的类与局部类型相同

名称格式为:xwork-conversion.properties,这是固定格式

内容格式为:bean类=转换处理类,如:java.util.Date=com.struts.converter.DateTypeConverter,最后把该文件放在src根目录下即可

最后附上转换器的处理流程:

(1)输入:HTML表单提交—Action类处理—执行属性setter方法—如果需要类型转换—找到properties文件—按照properties设置找到对应的转换类,调用转换器-把返回值通过setter方法给action中属性赋值。
(2)输出:Action类处理—执行属性getter方法—如果需要类型转换—找到properties文件—按照properties设置找到对应的转换类,调用转换器-把返回值通过getter方法输出到页面。

2
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics