笔者不建议在Action中使用Set集合属性,因为Set集合里元素处于无序状态,所以Struts 2不能准确地将请求参数转换成Set元素。不仅如此,由于Set集合里元素的无序性,所以Struts 2也不能准确读取Set集合里的元素。 除非Set集合里的元素有一个标识属性,这个标识属性可以唯一地表示集合元素,这样Struts 2就可以根据该标识属性来存取集合元素了。 程序清单:codes\04\
如果上面的类型转换器都是基于DefaultTypeConverter类实现的,基于该类实现类型转换器时,将字符串转换成复合类型要通过convertValue方法实现,将复合类型转换成字符串也是通过convertValue方法实现的,因此我们必须先通过toType参数来判断转换的方向,然后分别实现不同转换方向的转换逻辑。
仅仅为该应用提供类型转换器还不够,因为Struts 2依然不知道何时使用这些类型转换器,所以我们必须将类型转换器注册在Web应用中,Struts 2框架才可以正常使用该类型转换器。 Struts 2支持如下三种注册类型转换器的方式。 Ø 注册局部类型转换器:局部类型转换器仅仅对某个Action的属性起作用。 Ø 注册全局类型转换器:全局类型转换器对所有Action的特定类型的属性都会生效。 Ø 使用JDK 1.5的注释来注册类型转换器:通过注释方式来注册类型转换器。
大部分时候,我们使用Struts 2提供的类型转换器,以及基于OGNL的类型转换机制,就能满足大部分类型转换需求。但在有些特殊的情形下,例如需要把一个字符串转换成一个复合对象(例如 User对象)时,这就需要使用自定义类型转换器。例如,用户输入一个abc,xyz字符串,我们需要将其转换成一个User类型实例,其中abc作为User实例的name属性值,而xyz作为User实例的pass属性值。
前面我们使用集合时都使用了泛型,这种泛型可以让Struts 2了解集合元素的类型,Struts 2就可通过反射来创建对应类的对象,并将这些对象添加到List中。 问题是:如果不使用泛型,Struts 2还知道使用类型转换器来处理该users属性吗?Struts 2当然不知道!但Struts 2允许开发者通过局部类型转换文件来指定集合元素的类型。类型转换文件就是一个普通的Properties(*.
借助于内置的类型转换器,Struts 2可以完成字符串和基本类型之间的类型转换。除此之外,借助于OGNL表达式的支持,Struts 2允许以另一种简单方式将请求参数转换成复合类型。系统的Action类代码片段如下。 程序清单:codes\04\4.1\ognlConvert\WEB-INF\src\org\crazyit\app\domain\LoginAction.java public c
对于大部分的常用类型,开发者无须理会类型转换,Struts 2可以完成大多数常用的类型转换。这些常用的类型转换是通过Struts 2内建的类型转换器完成的,Struts 2已经内建了字符串类型和如下类型之间相互转换的转换器。 Ø boolean和Boolean:完成字符串和布尔值之间的转换。 Ø char和Character:完成字符串和字符
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号