下面说说OGNL表达式的访问情况:

OGNL表达式能访问:访问属性访问方法,访问字体对象,访问静态属性和方法,访问构造方法,访问数组访问集合 – 投影、选择(? ^ $)

1,OGNL输出常量值

<s:property value="常量值"/>可以输出字符串常量.

字符串常量(string literal)
    以单引号或双引号括起来的字符串,例如:‘Hello World’和”Hello World”.在JAVA中,不能用单引号来界定字符串常量,而在OGNL中是可以的。不过特别要注意的是:如果是单个字符的字符串常量,则必须使用双引号来界定,例如:“S”。OGNL的字符串也支持转义序列,例如:要在JSP页面中输出”You said ,”Hello World”.”,那么可以使用<s:property>标签,如下:
<s:property value=“’You said,\”Hello World\”.’”/>
      注意:不要忽略了用于界定整个常量字符串的单引号。如果没有写单引号,那么整个字符串将不会被看成是字符串常量,而是被当作根对象的属性名,从而导致错误。
字符常量(Character literal)
     以单引号括起来的字符。例如,‘H’。注意,不能使用双引号,否则将被看成是字符串常量。
数值常量(Numeric literal)
除了Java中的int,long,float,double外,OGNL还让你用“B”或“b”后缀指定BigDecimal常量,用“H”或”h”后缀指定BigInteger常量,例如,123(int常量),123l(long常量),123.35f(float常量),123b(BigDecimal常量),123h(BigInteger常量)。

2,获取Action中的属性值或者Action中的对象的某某属性值

注意这里的username是action中的属性,user是action中的属性对象,因为action是放在值栈中的所以不需要使用#字号访问

访问属性:<s:property value="username"/>
访问对象属性(get和set):<s:property value="user.age"/>
访问对象方法:<s:property value="user.getName()"/>
访问对象属性(get和set):<s:property value="employee.manager.name"/>

3,调用Action的对象里面的普通方法

默认的会把Action放到值栈里面,而值栈在访问的时候,并不需要值栈的名字
当我们调用<s:property value="user.getVOMethod()"/>的时候,它会自动到值栈里面查找Action对象里面有没有user对象,然后它就发现有user,然后它就再找user里面有没有getVOMethod()方法,然后它发现有,于是调用getVOMethod(),实际上调用User中的getVOMethod()方法的过程与获取表单中的姓名密码的方式都是相同的,都是到值栈里面查找,找是否存在user对象,如果存在,接着查找user中是否存在某某属性或方法

访问类对象的方法:<s:property value="employee.eat()"/>访问action的方法:<s:property value="add()"/>


4,访问Action中的静态属性和方法

以@开头,后面跟上具体的包名,然后@加上静态方法

<span style="font-size:24px;">比如<s:property value="@com.jadyer.action.LoginAction@getStatic()"/></span>

OGNL支持调用类中的静态方法和静态字段,格式如下:

@class@method(args)//调用静态方法
@class@field//访问静态字段(public权限)

其中class必顺给出完整的类名。例如:@java.lang.String@valueOf(5)。如果省略class,那么默认使用类是java.lang.Math

访问静态方法:<s:property value="@com.neusoft.ognl.StaticSample@ma()"/>
访问静态属性:<s:property value="@com.neusoft.ognl.StaticSample@STR"/>
访问Math静态方法:<s:property value="@@max(4,7)"/>

5,访问的构造方法

<span style="font-size:24px;">访问构造方法:<s:property value="new com.neusoft.ognl.User(44)"/></span>

6,OGNL创建和访问集合数组

a,OGNL创建集合

    如果需要一个集合元素的时候(例如List对象或者Map对象),可以使用OGNL中同集合相关的表达式。可以使用如下代码直接生成一个List对象:

创建集合:<s:property value="{'a','b','c'}"/> <!--输出结果为:[a,b,c]-->
集合类型:<s:property value="{'a','b','c'}.getClass().getName()"/><!--输出类型名称是java.util.ArrayList-->  

    如下代码可以直接生成一个Map对象:

创建Map:<s:property value="#{'mm':'MM','nn':'NN'}"/>"<!--输出结果为:{mm=MM,nn=NN}-->
Map类型:<s:property value="#{'mm':'MM','nn':'NN'}.getClass().getName()"/><strong style="color: rgb(255, 0, 0);">  </strong><!--输出类型名称是java.util.LinkedHashMap-->

b,OGNL访问集合

  

<li>访问List:<s:property value="users"/> </li>
<li>访问List中某个元素:<s:property value="users[0]"/>  </li>
<li>访问List中元素某个属性的集合:  <s:property value="users.{age}"/></li>
<li>访问List中元素某个属性的集合中的特定值:  <s:property value="users.{age}[0]"/>|<s:property value="users[0].age"/> </li>

<li>访问Set:<s:property value="managers"/></li>
<li>访问Set中某个元素:<s:property value="managers[0]"/></li><!-- 错误,无法根据下标访问元素 -->

<li>访问Map:<s:property value="manMap"/></li>
<li>访问Map中某个元素:<s:property value="manMap.mm1"/>|<s:property value="manMap['mm1']"/>|<s:property value="manMap[\"mm1\"]"/></li>
<li>访问Map中所有的key:<s:property value="manMap.keys"/></li>
<li>访问Map中所有的value:<s:property value="manMap.values"/></li>
<li>访问容器的大小:<s:property value="manMap.size()"/></li><strong>
</strong>

c,集合中的伪属性

OGNL能够引用集合的一些特殊的属性,这些属性并不是JavaBeans模式,例如size(),length()等等. 当表达式引用这些属性时,OGNL会调用相应的方法,这就是伪属性.

struts2的OGNL表达式(二)相关推荐

  1. Struts2的OGNL表达式语言

    支持Struts2的OGNL表达式语言(2009-04-25 01:11:36) <script></script> 标签:struts2 ognl it  分类:Spring ...

  2. struts2的OGNL表达式理解(一)

    一,什么是OGNL表达式     OGNL是Object-Graph Navigation Language(对象图导航语言)的缩写,它是一种功能强大的表达式语言(Expression Languag ...

  3. Struts2:OGNL表达式

    OGNL表达式 OGNL(Object-Graph Navigation Language)的全称是对象图导航语言,是一个用来获取和设置java对象属性的表达式语言的开源表达式语言,通过使用表达式语法 ...

  4. 深入分析JavaWeb Item48 -- Struts2中OGNL表达式与ValueStack

    一.OGNL表达式 1.OGNL表达式介绍 OGNL是Object Graphic Navigation Language(对象图导航语言)的缩写,它是一个开源项目. Struts2框架使用OGNL作 ...

  5. JSTL/EL表达式/Struts2标签/OGNL表达式

    文章目录 JSTL + EL表达式 Struts 标签 + OGNL表达式 JSTL + EL表达式 JSTL 只能用在 JSP 文件中,不可以在 XML 和 HTML 文件中使用,不可以用在 JS ...

  6. Struts2之OGNL表达式语言

    1.OGNL是Object-Graph Navigation Language的缩写,是一种功能强大的表达式语言,通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构 ...

  7. Java el ognl 正则,struts2中ognl表达式 各种合集_struts2 ognl 正则表达式_struts2 ognl表达式...

    摘要 0x00 前言 它们是对结构说明236的引用(因为字段256中的代码和在字段240中的代码相同)和对数据结构222的开始的引用,字段258包含该开始地址.三.data uri schema将文件 ...

  8. struts2的OGNL表达式(三)

    1,访问action基本属性和实体对象, 2,访问action集合/数组.访问Map.访问时运算.访问时调用方法.创建集合 3,访问action的静态属性和方法 4,访问其他5个就不说了,要加个#号引 ...

  9. Struts2的OGNL标签详解

    一.Struts2可以将所有标签分成3类: UI标签:主要用于生成HTML元素的标签. 非UI标签:主要用于数据库访问,逻辑控制等标签. Ajax标签:用于Ajax支持的标签. 对于UI标签,则有可以 ...

最新文章

  1. 经典推荐:《Silverlight揭秘》和《ASP.NET 3.5高级程序设计(第2版)》
  2. STM32F103C8T6引脚功能分布
  3. Linux 命令(19)—— tar 命令
  4. PHP判断远程url是否有效的几种方法
  5. id 和 class 选择器
  6. mysql study_mysql_study_3
  7. 考研数据结构(3)笔记
  8. Oracle-Oracle数据库备份与恢复
  9. html5图片在线剪辑,Web端裁剪图片方法
  10. wps画流程图交叉弧形_word流程图-WPS绘制流程图的正确打开方式,超级简单
  11. 用WebCollector 2.x爬取新浪微博(无需手动获取cookie)
  12. scrapy爬取彼岸图网照片(搜索关键字,去重)
  13. 今日起禁止个人注册CN域名(每日关注2009.12.14)
  14. Getting Started and Beyond|云原生应用负载均衡选型指南
  15. 公司发给你一个gitLab账号怎么配置项目!
  16. windows下查看和关闭端口
  17. SpringCloud+SpringBoot b2b2c 电子商务平台涉及的技术、运营方案
  18. Java零基础学习Day01(搭配视频)
  19. mac上的PowerDesigner(PDM)
  20. 工业4.0时代读后感

热门文章

  1. 事件控制寄存器(AFIO_EVCR) (2011-09-09 13:51:58)
  2. Hyperledger Besu(4)身份许可
  3. C++ Primer 5th笔记(3)字符串、向量和数组:向量vector
  4. [专栏目录]-ARM学习笔记目录
  5. 深度学习arm cache系列--一篇就够了
  6. SEO -- 搜索引擎优化
  7. 【攻防世界007】simple-check-100
  8. 2020-12-5(操作系统---设备管理)
  9. CTF中PHP相关题目考点总结(二)
  10. vSphere开发指南1——vSphere Automation API