力所能及之struts2转换器

小狼最近写东西总是有一个问题,action里面如果写成

          private Date createTime;

          get/set方法

jsp里面这么写

         生日<input type="text" name="createTime">

就会报错。

这是为什么,小狼查了一下百度。struts2内置转换类型没有将java.lang.String转换成java.util.Date的实现,所以我们要来实现一下。

写一个DateConverter.java,实现DefaultTypeConverter,重写convertValue方法。

public class DateConverter extends DefaultTypeConverter {

	@Override
	public Object convertValue(Object value, Class toType) {
		// TODO Auto-generated method stub
		if (value == null) {
			return false;
		}

		if (toType == null) {
			return false;
		}
		if (toType != java.util.Date.class) {
			return false;
		}

		if (value instanceof java.lang.String[]) {
			String[] str = (String[]) value;

			if (str[0] != null && str[0].length() > 0) {

				try {
					SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
					return sdf.parse(str[0]);
				} catch (ParseException e) {
					throw new RuntimeException(e);
				}
			}

		}

		return new Date();
	}
}

最后写完了得告诉struts2,我给你写了一个转换器。有两种方法。

第一种:在src目录下创建xwork-conversion.properties,全局转换器

java.util.Date=zcy.test.converter.DateConverter

转换类型=自定义转换器

第二种:在action目录下创建UserAction-conversion.properties,局部转换器,UserAction是本人写的action的名称,即createTime所在的action

createTime=zcy.test.converter.DateConverter

需要转换类型的字段名称=自定义转换器


当然,还有一个问题,当转换器不识别的时候,比如我输入的是1a2/12/12的时候,我们在错误页面这么写

 <s:fielderror fieldName="createTime"/>

显示在浏览器是一串英文,这显然不合适

我们在struts2底层中找到这一句话 xwork-messages.properties

xwork.default.invalid.fieldvalue=Invalid field value for field "{0}".

我们想把他转换成中文

在struts2底层中default.properties找到struts.custom.i18n.resources

创建converter.properties名字随便起

这么写

xwork.default.invalid.fieldvalue=“转换类型失败{0}”.

写完之后得告诉struts2,我写了这个message。

在struts.xml中配置

<constant name="struts.custom.i18n.resources" value="converter"></constant>


ok



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值