ONGL表达式的用法
2020-04-09 16:05:51来源:博客园 阅读 ()
ONGL表达式的用法
什么是ognl?
- OGNL是Struts2中使用的一种表达式语言。
- 它可以用于在JSP页面,使用标签方便的访问各种对象的属性;
- 它可以用于,在Action中获取传递过来的页面中的参数(并进行类型转换);
- 它还可以用在struts2的配置文件中!
在OGNL的使用中,需要访问到一系列的对象,这些对象都存放在OGNL的context(上下文)中,context是一个Map结构,存放了一系列的key-value对,实际上,它和ActionContext类是相对应的。在OGNL的context中,有一个根对象为ValueStack,该对象实际上是一个栈,但在Struts 2框架中只存放了一个对象,就是action对象。在action中数据会被压入值栈中,那么在页面中就可以通过ongl表达式取出值栈中的值。
(要了解值栈的概念可以看大佬的这篇 Struts2 | 深入浅出理解struts2中的值栈:https://www.jianshu.com/p/82954b841b5e)
ognl表达式的使用
ognl表达式要结合Struts的标签库来使用,主要有#、%和$三个符号的使用。
1、#符号的三种用法
1)访问非根元素(在struts中值栈为根对象),如ongl上下文和Action上下文,这里#相当于ActionContext.getContext()
下表有几个ActionContext中有用的属性:
属性 | 说明 | 表达式 | 表达式说明 |
parameters | 包含当前HTTP请求参数的Map | #parameters.paramName[0] | 相当于request.getParameter("paramName"); |
request | 包含当前HttpServletRequest的属性(attribute)的Map | #request.key | 相当于request.getAttribute(“key”) |
session | 包含当前HttpSession的属性(attribute)的Map | #session.key | 相当于session.getAttribute(“key”) |
application | 包含当前应用的ServletContext的属性(attribute)的Map | #application.key | 相当于application.getAttribute(“key”) |
注:attr 用于按request > session > application顺序访问其属性(attribute),#attr.key相当于按顺序在以上三个范围(scope)内读取key对应的属性值,直到找到为止。
2)用于过滤和投影(projecting)集合,
如: persons.{?#this.age>20}。
3)用来构造Map,
如下面的: #{’foo1′:’bar1′,’foo2′:’bar2′}。
2、%符号
%符号用于标志的属性为字符串类型时,计算ognl表达式的值,示例:
<center> <s:set var="foobar" value="#{'foo1':'bar1', 'foo2':'bar2'}" /> <p>The value of key "foo1" is <s:property value="#foobar['foo1']" /></p> <p>不使用%:<s:url value="#foobar['foo1']" /></p> <p>使用%:<s:url value="%{#foobar['foo1']}" /></p> </center>
运行结果:
3、$符号
$符有两种用法:
(1)在国际化资源文件中,引用OGNL表达式。
(2)在Struts 2配置文件中,引用OGNL表达式:
<action name=”saveUser” method=”save”> <result type=”redirect”>listUser.action?msg=${msg}</result> </action> <validators> <field name="intb"> <field-validator type="int"> <param name="min">10</param> <param name="max">100</param> <message>BAction-test校验:数字必须为${min}为${max}之间!</message> </field-validator> </field> </validators>
需要注意的是:在Struts2的标签中不能用EL表达式,而可以用OGNL表达式。
原文链接:https://www.cnblogs.com/liuyiyuan/p/12666158.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 学习笔记之Lambda表达式 2020-06-05
- JAVA8 Lambda表达式 2020-05-31
- Lambda表达式用法大比较: Scala和Java 8 2020-05-26
- Git 高级用法,喜欢就拿去用! 2020-05-18
- 错题记录——关于Java中private的用法(类与封装) 2020-05-16
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash