《研磨struts2》第七章 值栈和OGNL 之 7.3 使用OGNL访问复杂对象
7.3??使用OGNL访问复杂对象7.3.1??访问域对象
通过ognl访问域对象,这件事情其实在好早以前,我们就已经做过了,只是那个时候不知道罢了,还是来示例一下。
(1)先来准备一个域对象,很简单,只有两个属性,代码示例如下:
?
图7.4? 新增页面
点击提交按钮过后,会跳转到结果页面,如下图所示:
?

图7.5? 新增后的结果页面
此时后台输出如下所示:
?
"userMap['umtest'].name"/>??(4)去运行测试看看,结果页面和后台应该都能正确地获取到值了。
(5)还可以访问Map的方法,比如:
- OGNL表达式为:map.size,就表示访问map这个Map的size()方法
- OGNL表达式为:map.isEmpty,就表示访问map这个Map的isEmpty()方法
(6)也可以直接在OGNL中构建Map,比如:
- OGNL表达式为:#{'one':'aa','two':'bb'},就表示构建一个包含2组值的Map,key值分别是one和two,对应的值分别是aa和bb
- OGNL表达式为:#{'one':'aa','two':'bb'}['one'],就表示构建一个包含2组值的Map,key值分别是one和two,对应的值分别是aa和bb,然后获取key为one的值,也就是aa了。
7.3.4? 组合使用
通过前面的讲述,你可以发现,OGNL可以访问不同的对象、属性和方法,那么可不可以把这些复杂的对象结构组合起来,让OGNL去访问呢?
假如在Session中,有一个List作为Session的属性,对应的key值是“users”,List里面放的全是UserModel类型的对象,现在要访问其中的第3个元素的userId属性,应该怎样用OGNL去访问呢?
?????? 回答这个问题需要层层分解,一步一步来:
- 要获取Session中一个key值为“users”的List,对应的OGNL应为#session[‘users’],或者#session.users
- 要操作这个List的第3个元素,对应的OGNL应为#session[‘users’][2],或者#session.users[2]
- 要操作这个对象的userId属性,对应的OGNL应为#session[‘users’][2].userId,或者#session.users[2].userId
这样,就得到了最终的OGNL,可以去测试一下,看看好用不。
?????? OGNL本身有很多的知识,这里只是介绍了OGNL中最常用的知识,更多的知识可以去http://www.ognl.org查看,那里有很详细的文档。
?
私塾在线网站原创《研磨struts2》系列
转自请注明出处:【http://sishuok.com/forum/blogPost/list/0/4070.html】
欢迎访问http://sishuok.com获取更多内容