struts2框架--------数据转换器( converter)

什么是转换器:
Web应用程序是基于HTTP协议的,服务器可以的接收到的来自客户端的数据只能是字符串或字符串数组
同样,客户端接收到来自服务器端的数据各种各样,但是也只能用字符串形式显示
struts2的Converter所起的作用是在页面数据和Java所支持的数据之间进行转换,在页面中,我们最常用的就是string类型。但是在Java类中。
Struts已经提供了基本的Converter,如基本类型(int,double等),还有日期 类型(yyyy-MM-dd格式)以及各种集合类型。

如果需要其他数据转换的功能,就需要自定义转换器


自定义选择器
通过继承OGNL.DefaultTypeConverter类,我们可以定义一个转换类
Struts2自定义类型转换器分为局部类型转换器和全局类型转换器
局部转换器只针对一个Action生效
全局转换器针对所有Action生效
例子:自定义一个日期转换器

局部转换器开发步骤
首先要写一个类来继承DefaultTypeConverter并且覆盖convertValue这个方法,在里面进行数据转型操作
在action类所在的包下放置ActionClassName-conversion.properties文件,其中ActionClassName是类名,后面的-conversion.properties是固定的写法,如:HelloWorldAction-conversion.properties
Properties文件里面的内容为:属性名称=类型转换器的全类名(既包名.类名)
如:birthday=converters.DateTypeConverter


convertValue方法详解
(1) convertValue 方法的作用 :负责完成类型的转换,这种转换是双向的:当字符串转换成其他类型时,通过该方法;当需要其他类型转换成字符串,也是通过该方法。我们可以通过判断 toType 的类型来判断转换方向。
(2) convertValue 方法的参数和返回值:

     第一个参数:context是类型转换环境的上下文。

     第二个参数:value是需要转换的参数。随着转换方向的不同,value参数的值也是不一样的。当把字符串向其他类型转换的时候,value是原始字符串数组;当从其他类型向字符串转换的时候,value是其他类型的实例。

     第三个参数: toType 是转换后的目标类型;

    该方法的返回值就是类型转换后的值,该值的类型会随转换方向的不同而不同。toType是什么类型,就返回什么类型

(3) 当把字符串转换成其他类型的时候,为什么value是一个字符串数组,而不是一个字符串主要考虑可能信息是多个值(同名的字段)。


全局转换器
如果业务需求所有的日期都要转换,则可以使用全局类型转换器,只要在src根目录下面放置xwork-conversion.properties文件,并且properties文件中的内容为:
待转换的类型=类型转换器的全类名
如:java.util.Date =com.type.Converter.DateTypeConverter 即可





内置转换器
对于一此经常用到的转换器,如日期、整数或浮点数等类型,Struts 2.0已经实现了
1. 预定义类型,例如int、boolean、double等;
2. 日期类型
3. 集合(List)类型, 将request.getParameterValues(Stringarg)返回的字符串数据与java.util.Collection转换;
4. 集合(Set)类型, 与List的转换相似,去掉相同的值;
对于已有的转换器,Struts在遇到这些类型时,会自动去调用相应的转换器。 


基于Struts2 的类型转换器
上面的类型转换是基于DefaultTypeConverter 类实现的。将字符串转换成复合类要通过 convertValue 的方法来实现,将复合类转换成字符串也要通过 convertValue 方法实现的。因此我们必须通过 toType 参数来判断转换的方向,然后分别实现不同转换方向的转换逻辑。为了简化转换器的实现
Struts 2 还提供了一个子类StrutsTypeConberter public abstract  class  StrutsTypeConverter extends  DefaultTypeConverter
该类将convertValue方法拆分成两个方法,分别实现数据转换的两个方向:
convertFromString
convertToString

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值