struts2 类型转换

Struts2自定义类型转换器

从表单提交的数据全是字符串,在数据到达Action类前会有拦截器先对表单请求进行处理,其中参数拦截器完成表单数的类型转换,但struts2在提供简单的数据转换功能,并不能完全满足实际需求。比方说日期数据转换只支持"yyyy-mm-dd"方式,而实际web应用中不可能只用这种日期表示方式。提交不支持的转换数据类型,会出现类型转换错误。因此需要自定义类型转换器。

<!--参数拦截器 -->
<interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

如果类型转换失败,有两种情况:

  1. Action 类没有实现 ValidationAware 接口: Struts 即使在遇到类型转换错误时仍会继续调用目标Action 方法。
  2. Action 类实现了 ValidationAware 接口:Struts 在遇到类型转换错误时将不会继续调用目标Action 方法:,直接返回字符串"input"。

自定义类型转换器步骤

1.创建类型转换器类

继承StrutsTypeConverter类,重写convertFromString方法

示例:

MyTypeConverter.java

package cn.iborder.interceptor;

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

import org.apache.struts2.util.StrutsTypeConverter;

public class MyTypeConverter extends StrutsTypeConverter{

	/**
	 * 自定义类型转换器
	 * @param context	上下文环境
	 * @param values		表单提交的数据(字符串数组)
	 * @param toClass	要转换的目标类型
	 */
	@Override
	public Object convertFromString(Map context, String[] values, Class toClass) {
		// TODO Auto-generated method stub
		if (values == null && values.length == 0) {
			return null;
		}
		if (Date.class != toClass) {
			return null;
		}
		SimpleDateFormat sdf = new SimpleDateFormat("yyyymmdd");		
		try {
			return sdf.parse(values[0]);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			throw new RuntimeException(e);
		}
	}

	@Override
	public String convertToString(Map arg0, Object arg1) {
		// TODO Auto-generated method stub
		return null;
	}

}
2.配置类型转换器

有两种方式

(1)基于字段的配置(局部类型转换器)

在字段所在的Action类的包下, 新建一个 Action类名-conversion.properties 文件。

内容格式如下:

字段名=类型转换器类名

示例:

UserAction-conversion.properties

user.birth =cn.iborder.interceptor.MyTypeConverter

(2)基于类型的配置(全局类型转换器)

在src路径下新建 xwork-conversion.properties 文件

内容格式如如下:

目标转换类型=类型转换器类名

示例

xwork-conversion.properties

java.util.Date = cn.iborder.interceptor.MyTypeConverter

注意:如果局部类型转换和全局类型转换同时存在的话,局部类型转换具有较高的优先级。

转载于:https://my.oschina.net/u/2321708/blog/808903

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值