博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
gnl总结(#,%,$)
阅读量:6604 次
发布时间:2019-06-24

本文共 2005 字,大约阅读时间需要 6 分钟。

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:

    1. <action name="saveUser" class="userAction" method="save">   
    2.   
    3. <result type="redirect">listUser.action?msg=${msg}</result>   
    4.   
    5. </action>   
    6.   
    7. <action name="saveUser" class="userAction" method="save">       
    8.   
    9. <result type="redirect">listUser.action?msg=${msg}</result>   
    10.   
    11. </action>  愿望:http://www.cnblogs.com/luoxing/archive/2012/02/20/2359603.html
你可能感兴趣的文章
commons-lang中常用方法
查看>>
spring 定时任务
查看>>
thinkphp 路由规则终极详解(附伪静态)
查看>>
网络安全-加密算法
查看>>
This tag and its children can be replaced by ~~~
查看>>
XCode快捷键
查看>>
struts2 修改action的后缀
查看>>
php保存canvas生成的图片
查看>>
HTML5 定位
查看>>
禁止http 缓存的方法
查看>>
python windows下安装pip(三)
查看>>
Android图像处理(二)--Paint,Canvas,ColorMatrix详细
查看>>
Android 百度地图
查看>>
常见设计模式之【模板模式】
查看>>
Kolla - 使用docker安装部署openstack
查看>>
Mysql登录时提示1045的解决办法
查看>>
MySql 远程连接中phpmyadmin的设置
查看>>
类型判断时instanceof和equals的不同用法
查看>>
设计师与客户:迁就难出好设计
查看>>
discuz 门户diy实现翻页功能的修改记录
查看>>