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 ...
随机推荐
- Caffe学习系列(4):激活层(Activiation Layers)及参数
在激活层中,对输入数据进行激活操作(实际上就是一种函数变换),是逐元素进行运算的.从bottom得到一个blob数据输入,运算后,从top输入一个blob数据.在运算过程中,没有改变数据的大小,即输入 ...
- SQL 语句大全
转载:http://www.cnblogs.com/yubinfeng/archive/2010/11/02/1867386.html 经典SQL语句大全 一.基础 1.说明:创建数据库 CREATE ...
- 【niubi-job——一个分布式的任务调度框架】----如何开发一个niubi-job的定时任务
引言 上篇文章LZ主要讲解了niubi-job如何安装,如果看过上一篇文章的话,大家应该知道,niubi-job执行的任务是需要用户自己上传jar包的. 那么问题来了,这个jar包如何产生?有没有要求 ...
- .NET 关键字
一.base关键字 可以通过base关键字访问上一级父类方法的访问.静态static函数无法调用base 二.new 关键字new new有2个作用. new运算符 用来分配内存空间和初始化对象. ...
- angular的工具方法笔记(equals, HashKey)
分别是angular脏值检测的工具方法equals和 类HashKey的使用方法 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transi ...
- Beta项目冲刺汇总贴
第一天 http://www.cnblogs.com/Allenbi/p/5003704.html 第二天 http://www.cnblogs.com/Allenbi/p/5020820.html ...
- Xamarin.Forms——WebView技术研究
在Xamarin中有一些Forms原生不太好实现的内容可以考虑使用HTML.Javascript.CSS那一套前端技术来实现,使用WebView来承载显示本地或网络上的HTML文件.不像OpenUri ...
- c++ 中 delete p与 delete []p的区别
#include <cstdio> class A{private: int i;public: ~A() { printf("hi"); }};void d(A *) ...
- Quartz 定时任务管理
前言 将项目中的所有定时任务都统一管理吧,使用 quartz 定时任务 设计思路 使用 quartz 的相关jar 包,懒得去升级了,我使用的是 quart 1.6 写一个定时任务管理类 用一张数据库 ...
- JSP九个内置对象
JSP内置对象有: 1.request对象 客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应.它是HttpServletRequest类的实例. 2.r ...