【struts2】struts2实现自定义数据类型转换器

JSP提交的数据全部都是String类型的。struts2也是通过request.getParameter(name)获取到String类型数据,并通过拦截器将String转换成各种常用的数据类型,如:Date、Time、Timestamp等,然后通过getter、setter方法设置到Action对应的属性上。

struts2默认的转换器并不总是满足要求。例如:输入时间,struts2只能转换形如12:00:00的格式,而输入12:00就会抛错,也有一些数据类型struts2转换不了。因此,需要自定义数据转换器

数据类型转换器都需要实现ognl.TypeConvertor接口。一般的,直接继承DefaultTypeConvertor类,并实现
convertValue(Map context,Object value,Class toType)方法就可以了。(DefaultTypeConvertor是位于ognl包下的,是ognl开源标准中的一部分。从此可以看出struts2集成了许多其他的技术。)

convertValue(Map context,Object value,Class toType)方法有三个参数,参数value为待转换的数据,参数toType为要转成的类型。注意JSP提交数据时,参数value为request.getParameterValues(String name)返回的String[]类型对象,而不是String。

===========================================

下面自定义一个日期、时间转换器。该转换器能够转换各种常用的时间格式。convertValue()方法既能将Date转换成String,也能讲String转换成Date。

==========================================

工作原理:

用户在convert.jap页面中输入要转换的内容后将请求提交,请求被提交到FilterDispatcher过滤器,FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(HttpServlet Request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher则把请求的处理交给ActionProxy,ActionProxy通过Configuration Manager(struts.xml)询问框架的配置文件,加载一系列的拦截器,找到需要调用的Action类和相应的转换器,由拦截器将HttpServletRequest参数解析出来,传入Action,然后由action调用转换器进行数据转换处理。

==========================================

实现如下:

DateTimeConvertor.java

package com.lmb.struts2.convertor;

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

import ognl.DefaultTypeConverter;

public class DateTimeConvertor extends DefaultTypeConverter {
   

    //日期格式转化器
    private DateFormat[] dateFormat={
            new SimpleDateFormat("yyyy-MM-dd"),//格式如2008-08-08
            new SimpleDateFormat("yyyy/MM/dd"),//格式如2008/08/08
            new SimpleDateFormat("yy-MM-dd"),//格式如08-08-08
    };
    //时间格式转化器
    private DateFormat[] timeFormat={
            new SimpleDateFormat("HH:mm:ssss"),//格
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值