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. <result type="redirect">listUser.action?msg=${msg}</result>
    3. </action>
    4. <action name="saveUser" class="userAction" method="save">
    5. <result type="redirect">listUser.action?msg=${msg}</result>
    6. </action>  愿望:http://www.cnblogs.com/luoxing/archive/2012/02/20/2359603.html

gnl总结(#,%,$)的更多相关文章

  1. lucene+IKAnalyzer实现中文纯文本检索系统

    首先IntelliJ IDEA中搭建Maven项目(web):spring+SpringMVC+Lucene+IKAnalyzer spring+SpringMVC搭建项目可以参考我的博客 整合Luc ...

  2. MySQL数据库的安装与密码配置

                      MySQL是由MySQL AB公司开发,后由Oracle公司收购     MySQL是一个关系型数据库管理系统       分为社区版和企业版            ...

  3. Moon.Orm性能报告

    以下为有网友公司的评估测试及使用规范 大家可以下载word看看 http://pan.baidu.com/s/1hquvRuc 一.和ADO.NET进行的压力测试 说明:2000并发用户,此图为一网友 ...

  4. Android 四大组件之Service

    ---恢复内容开始--- 1,Service的生命周期

  5. 数据处理之CoreData

    一.CoreData数据库框架与Sqlite对比 Sqlite: 1.基于C接口, 需要使用sql语句, 代码繁琐 2.在处理大量数据时, 表关系更直观 3.在OC中不是可视化的 CoreData: ...

  6. UI数据库

    一.数据库 SQL: SQL是Structured Query Language(结构化查询语言)的缩写.SQL是专为数据库而建立的操作命令集, 是一种功能齐全的数据库语言. 二.数据库管理系统 数据 ...

  7. python之列表、字典、集合

    列表 name = ["Alex","Eenglan","Eric"] print(name[0]) print(name[1]) prin ...

  8. JS中的get & set

    之前在看<Javascript 高级程序设计>一书中遇到过getter和setter,但因当时难于理解,且觉得用处较小,没有细看,今日突然遇到了一种使用get&set读写对象属性的 ...

  9. url 处理

    一.jsp异步请求后台(servlet) 的url RegisterServlet  与 web.xml 的路径一样 function checkPhoneNumber(){ var phonenum ...

随机推荐

  1. matlab建立双坐标

    (1)设定双Y坐标 x=0:0.1:2*pi; y1=sin(x); y2=cos(x); y3=1-sin(x); [AX]=plotyy(x,y1,x,y2); %双Y坐标的建立 hold on; ...

  2. 实验五实验报告 20135324&&20135330

    北京电子科技学院(BESTI) 实验报告 课程:深入理解计算机系统 班级:1353 姓名:张若嘉 杨舒雯 学号:20135330 20135324 成绩: 指导教师:娄嘉鹏 实验日期:2015.11. ...

  3. 最长回文子串(Manacher算法)

    回文字符串,想必大家不会不熟悉吧? 回文串会求的吧?暴力一遍O(n^2)很简单,但当字符长度很长时便会TLE,简单,hash+二分搞定,其复杂度约为O(nlogn), 而Manacher算法能够在线性 ...

  4. openssl知识点总结

    openssl知识点总结 实践总结见之前博客:http://www.cnblogs.com/Jclemo/p/6091201.html 简介 openssl是一个功能丰富且自包含的开源安全工具箱.它提 ...

  5. .NET领域最为流行的IOC框架之一Autofac

    一.前言 Autofac是.NET领域最为流行的IOC框架之一,微软的Orchad开源程序使用的就是Autofac,Nopcommerce开源程序也是用的Autofac. Orchad和Nopcomm ...

  6. 删除 windows 下 node_modules 过深的目录

    本文同步自我的个人博客:http://www.52cik.com/2015/11/13/node-modules-del.html 说到 node 的模块,确实既好用又蛋疼.相信无数人吐槽 node_ ...

  7. 程序员的出路在哪里?挣钱的机会来了续-福利来了,仿QQ界面,放出全部源码,打造创业框架及实现思路

    上一篇:程序员的出路在哪里?挣钱的机会来了!, 原来搞技术,挣钱,不一定非得要多高精尖,有时候抓住小白用户,解决他们一个很小但是很常用的功能,也是一条很好的出路. 其实很多软件产品,要实现出来没有你想 ...

  8. [USACO2004][poj2375]Cow Ski Area(在特殊图上用floodfill代替强联通算法)

    http://poj.org/problem?id=2375 题意:一个500*500的矩形,每个格子都有一个高度,不能从高度低的格子滑到高度高的格子(但相等高度可以滑),已知可以在2个相邻格子上加桥 ...

  9. Bootstrap3.0学习第七轮(按钮)

    详情请查看http://aehyok.com/Blog/Detail/13.html 个人网站地址:aehyok.com QQ 技术群号:206058845,验证码为:aehyok 本文文章链接:ht ...

  10. iOS边练边学--菜单悬停效果的实现思路