struts2的OGNL和类型转换

原文:http://blog.sina.com.cn/s/blog_5f54f0be0100n00h.html

OGNL 和类型转换

前面已经做了简单的介绍,将用户提交的内容映射成动作的属性,将属性内容通过标签显示在 JSP 页面中。这些过程是通过 OGNL Object-Graph Navigation Language 对象图导航语言)实现的。它在框架中实现两方面的功能:数据转移和类型转换。

数据转移就是上面的将参数转换成属性,或将属性显示在页面。

类型转换就是如何将页面上提交的 String 转换成属性中的 float date 属性。或反过来。

 

OGNL 的作用方式如下 :

当我们发送一个 HTTP 请求 ( 通过 JSP servlet ) , 请求内容可能是 :username=sunyu&age=24 :user.username=sunyu&user.age=24 总之 ,HTTP 请求的参数是以字符串形式发送的 . 请求经过框架时 , 框架会自动生成请求 action 的实例 , 并将它放在值栈 ValueStack .OGNL 将值映射成属性 ( 通过 params 拦截器 , 前面已经说过 ). JSP 页面中 , 我们通过 <s:property value=”user.age” /> :<s:property /> 标签来访问 ValueStack 中的内容 .

 

Struts2 自带了一些类型转换器 , 以对 HTTP 字符串和下列 JAVA 类型进行转换 ( 自动进行 ):

1.       String

2.       Boolean/Boolean:true false 字符串可以被转换成布尔值的原始类型有包装类 .

3.       Character/char:

4.       Integer/int,Float/float,Long/long,Double/double

5.       Date: 当前 Locale SHORT 格式的字符串 , :98/10/11

6.       Array:

7.       List: 默认使用 String 填充 .

8.       Map: 默认使用 String 填充 .

举例 :

1.       原始类型

<input name=”user.username” />

<input name=”user.age” />

<input name=”user.birthday” />

类里 :

private String username;

private Double age;

private Date birthday

框架会自动帮我们转换 . 我们能成功获得到 .

2.       数组 ;

<input name=”ages” />

<input name=”ages” />

<input name=”ages” />

上面这些指向 ages 属性 :Double[] ages

<input name=”names[0]” />

<input name=”names[1]” />

<input name=”names[2]” />

上面指向 :String[] names

但要注意的是 : 当我们提交上面的整个表单时 ,HTTP 请求如下 :

ages=12,33,55

names[0]=jack

names[1]=green

names[2]=mary

可以看出差别了 .

当框架转移 ages 参数时 , 它先找到 ages 属性 , 并且知道 ages 参数是一个有 3 个字符串的数组 . 由于动作上的 ages 属性也是一个数组 , 这样 OGNL 创建一个新的数组 , 值是参数的值 , 并将它赋给动作 . 并且它知道动作的属性 ages double 类型的 . 它会自动将参数的值转换成对应的类型 .

3.       List

用法和数组一模一样 . 只不过 JAVA 中是 List 但注意 , 这里最好是用泛型来声明 . 不然它会自动将参数转换成 String 类型并存入 List. 泛型用法 :

<input name=”names[0].username” />

<input name=”names[1].username” />

接收 :List<User> names

第一个 User username 为第一个 input 提交的值

4.       Map

list 不同 ,Map 需要一个键 , 一个值 . :

<input name=”nameMap.mary” />

<input name=”nameMap.hellen” />

<input name=”nameMap[‘Sunyu’]” />

上面一种用点语法 , 一种用方括号 . 但两种意思一样 , 当我们提交上面表单后 , 后台获得的值如下 :

Map<String,String> nameMap; 值为 :

mary --- > 第一 input 提交的值 .

hello --- > 第二 input 提交的值 .

…..

自定义类型转换

   也可自定义 类型转换器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值