gnl总结(#,%,$)
Ognl表达式struts标签“%,#,$”
1、什么是Ognl?
OGNL(Object-Graphic Navigation Language),对象图道行语言。是一种可以方便操作对象属性的开源表达式语言。
2、特点?
a、支持对象的方法调用,形式,eg:objName.methodName();
b、支持静态类的方法调用和值访问,expression:@【类全名(包括包路径)】@【方法名|值名】,eg:@tutorial.MyConstant@App_NAME;
c、支持赋值操作和表达式串联,eg:price=100,discount=80,calculatePrice()//返回80???
d、访问OGNL上下文(OGNL context)和ActionContext
e、操作集合对象
3、使用OGNL表达式
1)“#”符号有三种用途
a、访问非根对象(struts中值栈为根对象),eg:OGNL上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:
名称 作用域
eg:
1-1)parameters :包含当前HTTP请求参数的Map
#parameters.id[0]=>作用相当于request.getParameter("id")
1-2)request:包含当前HttpServletRequest的属性(attribute)的Map
#request.userName=>作用相当于request.getAttribute("userName");
1-3)session:包含当前HttpSession属性(attribute)的Map
#session.userName=>session.getAttribute("userName");
1-4)application:包含当前应用的ServletContext的属性(attribute)的Map
#application.userName=>application.getAttribute("userName");
notice:attr用于按request>session>application顺序访问其属性(attribute),#attr.userName;构造Map:{'foo1':'bar1','foo2':'bar2'}
b、用于过滤和投影
eg:books.{?#this.price>35}
c、用于构建Map集合
在页面上取一个Map的值:
eg:<s:property value="#myMap['foo1']"/>
2)“%”符号的用途是在标签的属性被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式,很有点类似javascript里面的eval_r()功能,例如 :
var oDiv = eval_r("document.all.div"+index) var oDiv = eval_r("document.all.div"+index)
当index变量为1时,语句就会被当作var oDiv = document.all.div1 var oDiv = document.all.div1来执行。%{}就是起这个作用。
eg:
<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>
<s:property value="#myMap['key1']"/>
<s:url value="#myMap['key1']"> //输出:#myMap['key1']
<s:url value="%{#myMap['key1']}"//输出:value1
notice:struts2里不同的标签对于ognl表达式的理解是不一样的
3)“$”符号有两种用途
3-1)在国际化资源文件中,引用OGNL表达式
3-2)在struts2配置文件中,引用OGNL表达式
eg:
- <action name="saveUser" class="userAction" method="save">
- <result type="redirect">listUser.action?msg=${msg}</result>
- </action>
- <action name="saveUser" class="userAction" method="save">
- <result type="redirect">listUser.action?msg=${msg}</result>
- </action> 愿望:http://www.cnblogs.com/luoxing/archive/2012/02/20/2359603.html
gnl总结(#,%,$)的更多相关文章
- lucene+IKAnalyzer实现中文纯文本检索系统
首先IntelliJ IDEA中搭建Maven项目(web):spring+SpringMVC+Lucene+IKAnalyzer spring+SpringMVC搭建项目可以参考我的博客 整合Luc ...
- MySQL数据库的安装与密码配置
MySQL是由MySQL AB公司开发,后由Oracle公司收购 MySQL是一个关系型数据库管理系统 分为社区版和企业版 ...
- Moon.Orm性能报告
以下为有网友公司的评估测试及使用规范 大家可以下载word看看 http://pan.baidu.com/s/1hquvRuc 一.和ADO.NET进行的压力测试 说明:2000并发用户,此图为一网友 ...
- Android 四大组件之Service
---恢复内容开始--- 1,Service的生命周期
- 数据处理之CoreData
一.CoreData数据库框架与Sqlite对比 Sqlite: 1.基于C接口, 需要使用sql语句, 代码繁琐 2.在处理大量数据时, 表关系更直观 3.在OC中不是可视化的 CoreData: ...
- UI数据库
一.数据库 SQL: SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集, 是一种功能齐全的数据库语言. 二.数据库管理系统 数据 ...
- python之列表、字典、集合
列表 name = ["Alex","Eenglan","Eric"] print(name[0]) print(name[1]) prin ...
- JS中的get & set
之前在看<Javascript 高级程序设计>一书中遇到过getter和setter,但因当时难于理解,且觉得用处较小,没有细看,今日突然遇到了一种使用get&set读写对象属性的 ...
- url 处理
一.jsp异步请求后台(servlet) 的url RegisterServlet 与 web.xml 的路径一样 function checkPhoneNumber(){ var phonenum ...
随机推荐
- JS案例之8——从一个数组中随机取数
近期项目中遇到一个需求,从一个列表中随机展示列表的部分内容,需求不大,JS也非常容易实现.主要是运用到了Math对象的random方法,和Array的splice方法. 思路是先新建一个数组,存放所有 ...
- [CareerCup] 3.4 Towers of Hanoi 汉诺塔
3.4 In the classic problem of the Towers of Hanoi, you have 3 towers and N disks of different sizes ...
- [CareerCup] 5.5 Number of Converted Bits 转换数字所需的位数
5.5 Write a function to determine the number of bits required to convert integer A to integer B.EXAM ...
- ios 消息推送流程 转载
iOS开发:推送通知简述及开发实践热度 1已有 706 次阅读 2013-10-15 09:23 |个人分类:经验之谈|系统分类:ios| IOS, 推送一.关于推送通知 推送通知,也被叫做远程通知, ...
- c#上利用NPlot实现动态曲线图需要的dll文件
这儿暂时只提供我之间根据网上的方法编译出来的dll文件,大家如果需要直接在vs项目上导入就行了,然后在工具箱里就会自动添加一项,大家添加上去就知道了. 下载地址:http://pan.baidu.co ...
- 上位机用USB做虚拟串口,总算抓到一个纯代码的总结了,没有坑的完美解决。
用libUSB来实现自己的驱动+下位机理论速度.=1M字节每秒. 达到极限速度 WINDOWS已经自带虚拟串口驱动,只不过还需要一个Inf文件 方法1:直接下载一个串口inf,来修改文件. 方 ...
- 整合 Bing translator 到自己的系统中
整合这个功能, 是因为 aliexpress 的买家来自不同国家, 我的 "小卖家" 同步到买家的留言, 很多西班牙,俄罗斯等小语种的文字, 看不懂. Google 被墙, 基本很 ...
- Python数据可视化编程实战——导入数据
1.从csv文件导入数据 原理:with语句打开文件并绑定到对象f.不必担心在操作完资源后去关闭数据文件,with的上下文管理器会帮助处理.然后,csv.reader()方法返回reader对象,通过 ...
- 19.C#逐一介绍IEnumerable和IEnumerable<T>中的扩展方法(10.3-10.5)
今天没有太多的言语,只有代码,扩展方法多得太多,不能一一列完,书中一些,看多了也就会使用了. //Enumerable.Range 返回起始到结束范围,是一个Enumrable<int>类 ...
- Sublime Text 3 绝对神器
距第一篇的开箱水文,已经有4个月的时间了,但因为懒,就没有下文了.终于,今天,我觉得写一篇准技术文章了. 忘记了是怎么开始用的ST,应该是在网上看到别人推荐才用到吧,用了有半年了.在windows下是 ...