关于Struts2框架的日期转换问题

**问题起源:**在学习Struts2框架 的时候,运行一个小demo,出现下述异常
在这里插入图片描述
经检查得知是form表单提交的数据中数据类型转换出错,具体就是form表单中有各种格式的日期数据,而在Action用Date类型变量去接收(上述异常也可能因其他问题导致,本例是日期转换问题
解决方案:
**方案一:**如果form表单的日期数据是固定值,且之后不用于其他操作,可以在Action类中用String类型变量去接收
**方案二:**自定义类型转换器,将表单提交的日期数据转换成Date类型的数据
步骤:
1、自定义一个类去继承StrutsTypeConverter类

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

import org.apache.struts2.util.StrutsTypeConverter;

//自定义一个类去继承StrutsTypeConverter类,并重写StrutsTypeConverter类的两个方法
public class MyConverter extends StrutsTypeConverter{

	//定义项目中支持的日期格式
	DateFormat[] df = { new SimpleDateFormat("yyyy年MM月dd日"),
			new SimpleDateFormat("yyyy-MM-dd"),
			new SimpleDateFormat("yyyy.MM.dd"),
			new SimpleDateFormat("yyyy/MM/dd"),
			new SimpleDateFormat("yyyyMMdd") };
	
	
	@Override
	public Object convertFromString(Map map, String[] values, Class clazz) {
		// 判断表单提交的内容不能为空
		if(values.length == 0 || values == null){
			return null;
		}
		// 判断类型必须为Date
		if(Date.class != clazz){
			return null;
		}
				
		// 循环转换,转换失败继续下一种格式的转换; 转换成功则直接返回
		for (int i = 0; i < df.length; i++) {
			try {
					return df[i].parse(values[0]);
				} catch (Exception e) {
					continue;
				}
			}
		return null;//不能转换项目中支持的所有日期格式
	}

	@Override
	public String convertToString(Map arg0, Object arg1) {
		
		return null;
	}

}

2、配置自定义类型转换器
方式一:配置局部类型转换器
命名格式:Action类名称-conversion.properties
Action类名称是当前需要进行日期转换的Action类的名称
配置文件内容:form表单的name属性值=自定义转换器类的全路径
例如:birthday=com.lzy.user.MyConverter
注意: 这种方式只对当前的Action有效,以及自定义转换器类配置文件目标Action类三者都在同一个包下
方式二:配置全局类型转换器
在src下创建xwork-conversion.properties配置文件(名字固定
配置文件内容:java.util.Date=自定义转换器类的全路径
例如:java.util.Date=com.lzy.user.MyConverter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值