首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

struts2 类型转换 (1)

2012-11-06 
struts2 类型转换 (一)一。struts2 内建的类型转换器。?对于大部分的常用类型,开发者根本无需创建自己的类型

struts2 类型转换 (一)

一。struts2 内建的类型转换器。

?

对于大部分的常用类型,开发者根本无需创建自己的类型转换器,
因为struts2可以完成大多数常用的类型转换。这些常用的类型转换
是通过struts2内建的类型转换器完成的,struts2已经内建了字符串
类型和如下类型之间的类型转换器。

?boolean和Boolean: 完成字符串和布尔值之间的转换。
?char和Character: 完成字符串和字符之间的转换。
?int和Integer: 完成字符串和整型值之间的转化。
?long和Long: 完成字符串和长整型值之间的转换。
?float和Float: 完成字符串和单精度浮点值之间的转换。
?double和Double:完成字符串和双精度浮点值之间的转换。
?Date: 完成字符串和日期类型之间的转换,日期格式使用用户请求所在Locale的SHORT格式。
?数组: 在默认情况下,数组元素是字符串,如果用户提供了自定义的类型转换器,也可以是其他符合类型的数组。
?集合: 在默认情况下,假定集合元素类型为String,并创建一个新的ArrayList封装所有的字符串。

?

二。基于 OGNL 的类型转换。

struts2 内建了 OGNl 表达式,可以方便的将我们在页面上输入的字符串数据转换成JavaBean中的Boolean,Float,Integer,Double,Long等数据类型,在无法转换成功时,还可以给出错误提示,非常方便

首先简历JavaBean:

?

struts.xml (WEB-INF/classes下)

?

信息展示页面:

?

我们在资源文件中加入:

xwork.default.invalid.fieldvalue={0}类型转换错误,运行index.jsp.,在三个输入框中都输入admin,则会出现以下提示:
user.password字段类型转换失败
birth字段类型转换失败


在资源文件中定义的是全局转换错误提示的内容,如果想对具体Action中的字段进行提示,则编写ActionName.properties,本文中对应的就是LoginAction.properties,放在和Action同一个目录下,内容格式如下:invalid.fieldvalue.birth (其中birth为action中属性名)

本文LoginAction.properties内容为:invalid.fieldvalue.birth=生日必须为数字:
再次运行index.jsp.结果如下:
user.password字段类型转换失败
生日必须位数字

?

注意:

??? 1. 因为 Struts2 是需要直接创建一个复合类(user 类)的实例,所以必须有无参数构造器。

?? 2. 如果希望使用 user.name 请求参数的形式为 Action 实例的 user 属性的 name 属性赋值,则必须 user类中 提供 setName() 方法;Action 提供 setUser() 方法。

?

?

更极端的情况,我们甚至可以直接生成 Collection (List.....) 或者 Map 实例

?

1.map

?

2.List

?? 把上面的 MyAction 总的 users 属性改成 List<User> ,我们就可以通过索引来指定请求参数转换成 List 的哪个元素。

jsp如下:

?

三。自定义类型转换器。

?

????? 如果用户输入一个 "abc,xyz" 字符串,我们需要将其转换成一个 User 类型的实力,其中 abc 为 User 实例的 name 属性,xyz 为 User 实例的 pass 属性。

?

?

配置有2种

1.局部类型转换器

ActionName-conversion.properties: ActionName 是需要转换生效的 Action 的类名,后面-conversion.properties 字符串是固定部分

?

上面内容对应的是 LoginAction-conversion.properties,内容是 user=lee.UserConverter

?

LoginAction-conversion.properties 文件应该与 LoginAction.class 放在相同位置。

?

?

2.全局类型转换器

?

?

五。数组属性的类型转换器

?对于前面的事例,一直只处理字符串数组的第一个元素。

如果页面上包含 2 个用户信息请求参数,名称都是 user,这 2 个请求参数必须通过 getParameterValues() 方法来获取,此时 user 请求参数必须是数组类型,或者 List 类型,如下:

?

?本例完全可以替代 四。 中的例子,因为本例不仅处理了单一请求参数;也处理了多个请求参数

?

?

六。集合属性的类型转换器

五。中的例子,可以把 users 改为 List类型

以上例子 List 必须用泛型

?

七。集合类型转换的高级特性

六。中的例子,List 必须用 泛型,下面不使用泛型

?

?

为了让系统的类型转换起作用,2 种方法:

1. 使用泛型来限制集合元素的类型

2. 使用 Struts 2 的配置文件:使用局部类型转换的配置文件来指定集合元素的数据类型。

?

List

LoginAction-conversion.properties

?

在 set 中指定索引属性

LoginAction-conversion.properties

转换成功!<br /><!-- 访问user集合属性里索引属性值为scott的元素的name属性-->用户1的用户名为:<s:property value="user('crazyit').name"/><br /><!-- 访问user集合属性里索引属性值为scott的元素的pass属性-->用户1的密码为:<s:property value="user('crazyit').pass"/><br /><!-- 访问user集合属性里索引属性值为abc的元素的name属性-->用户2的用户名为:<s:property value="user('abc').name"/><br /><!-- 访问user集合属性里索引属性值为abc的元素的pass属性-->用户2的密码为:<s:property value="user('abc').pass"/><br />生日为:<s:property value="birth"/><br />

?直接方法 set 元素:集合属性('索引属性值'),上面实例 2 个 user 实例的 name 属性分别是 crazyit 和 abc。


注意: Set 元素用的是() 。数组,list,map 用 []

?

?

?

?

?

热点排行