【Object Graphics Navigate Language】

类似于EL(Expression Language)表达式,

可以帮助我们在配置文件、JSP中来获取对象的值

这门语言比EL功能更强,体现在运算,还可以做一些对

数据的条件筛选

在获取普通属性和调用普通方法的时候,在每一个值的前面

实际上有一个this对象,这个this对象就是处理这个请求的

action的对象(不是单例模式)

//循环    value="要循环的集合"

<s:iterator var="p" value="list">

<s:property value="#p.pname" />

</s:iterator>

//逻辑判断

<s:if test="num <= 10">

小于等于10

</s:if>

<s:else if test="num <= 5">

小于等于5

</s:else if>

<s:else>

其他情况

</s:else>

从Action取得普通属性的值:

<s:property value="username" />

从Action取得对象的普通属性的值:

<s:property value="users.name" />

从Action取得对象的普通属性的值:

<s:property value="users.dog.type.toUpperCase()" />

调用Action的普通方法:

<s:property value="sum(1,2)" />

调用Action对象的普通方法:

<s:property value="users.sum(1,3)" />

调用Action对象的普通方法:

<s:property value="users.dog.sum(1,3)" />

开启静态访问开关

在struts.xml中增加一个常量的配置

<constant name="struts.ognl.allowStaticMethodAccess"value="true"></constant>

得到Action的静态属性:

//<s:property value="@包名.类名@属性" />

<s:property value="@action.OgnlAction@PI" />

得到Action的静态方法:

//<s:proerty value="@包名.类名@方法名(参数)"/>

<s:property value="@action.OgnlAction@sum(2.1,3.1)" />

调用Action对象的静态属性:

<s:property value="@entity.Users@PI" />

调用Action对象的静态属性:

<s:property value="@entity.Users@sum(2.1,3)" />

调用默认类(Math类)静态方法:

<s:property value="@java.lang.Math@max(3,4)" />

调用Action的构造方法:

<s:property value="new action.OgnlAction()" />

调用Action的构造方法:

<s:property value="new action.OgnlAction('tom').sum(3,4)" />

调用Action对象的构造方法:

<s:property value="new entity.Users().sum(4,5)" />

得到list集合:

<s:property value="list" />

得到list集合某个元素:

<s:property value="list[0]" />

得到list集合中的某个元素的属性的值:

<s:property value="list[0].name" />

得到list集合中的某个元素的属性的值:

<s:property value="list[0].dog.type" />

得到list集合中元素的某一个属性的集合:

<s:property value="list.{name}[0]" />

得到list集合中元素的属性的集合:

<s:property value="list.{dog}.{type}[0]" />

得到list集合长度:

<s:property value="list.size()" />

得到set集合:

<s:property value="set" />

得到set集合某个元素:

<s:property value="set.iterator().next()" />

得到set集合中的属性的集合:

<s:property value="set.{name}[0]" />

得到set集合中的属性的集合:

<s:property value="set.{dog}.{type}[0]" />

得到set集合长度:

<s:property value="set.size()" />

得到map集合:

<s:property value="map" />

得到map集合中某个元素:

//<s:property value="map['key名']" />

<s:property value="map['u1']" />

得到map集合中所有的key:

<s:property value="map.keys" />

得到map集合中所有的value:

<s:property value="map.values" />

得到map集合长度:

<s:property value="map.size()" />

【OGNL中的条件筛选】

1、所有的条件都封装在{}

2、利用条件筛选出来结果后,有可能并非全部都需要

可以通过这三个字符获取你想要的结果

?所有的、^取第一个(异或符号)、$取最后一个

3、#this表示的并非是“.”前面那个集合对象,

而是前面那个集合里面的某一个元素

带条件的集合(?--所有):

<s:property value="list.{?#this.id>=1002}" />

带条件的集合($--最后):

<s:property value="list.{$#this.id>=1002}" />

带条件的集合(^--首个):

<s:property value="list.{^#this.id>=1002}" />

带条件的集合(?--所有):

<s:property value="list.{?#this.id>=1002 and #this.name.length()>4}" />

带条件的集合(?--所有):

<s:property value="list.{?#this.id>=1002}

.{dog}.{?!(#this.type.length()>4)}[0].type" />

===================集合操作==========================

<fieldset>

<legend>LIST操作</legend>

<s:property value="list[1].getPname()" />

<br>

<s:property value="list.{dog}.{dname}[1]" />

<s:property value="list.{dog.dname}[1]" />

</fieldset>

<fieldset>

<legend>SET操作</legend>

<s:property value="set.iterator().next().pname" />

</fieldset>

<fieldset>

<legend>MAP操作</legend>

<s:property value="map['a']" />

<br>

<s:property value="map.values" />

</fieldset>

<fieldset>

<legend>条件筛选</legend>

<s:property value="list.{$#this.age>=18}.{pname}" />

<br>

<!-- 获取所有年满18岁,并且他们的狗的年龄大于等于2岁 -->

<s:property value="list.{?#this.age>=18 and #this.dog.age>=2}.{pname}" />

<s:property value="list.{?#this.age>=18}.{dog}.{?#this.age>=2}.{dname}" />

</fieldset>

OGNL 对象视图导航语言的更多相关文章

  1. OGNL(对象图导航语言)学习

    一.关于OGNL(Object-Graph Navigation Language),一种可以方便地操作对象属性的开源表达式语言. 特点:  1)支持对象方法调用,形式如:objName.method ...

  2. UnrealEd3视图导航

    本博客使用的版本:2010-08   [更多其他的UE3版本]     [最新的UE3版本 -- 2015-02]  [unreal engine wiki]   注:dx11被加入2011-03月版 ...

  3. UnrealEd3视图导航及常用快捷键

    本博客使用的版本:2010-08   [更多其他的UE3版本][tps所用版本: 2011-02]     [最新的UE3版本 -- 2015-02] [unreal engine wiki  中文w ...

  4. JS事件对象,筋斗云导航练习,跟随鼠标练习,放大镜练习,进度条练习

    JS事件对象,筋斗云导航练习,跟随鼠标练习,放大镜练习,进度条练习 btn.onclick = function(event) { 语句 } 其中event就是事件对象,在这个方法中指向的对象是onc ...

  5. ABC定制视图导航控制器

      ABCustomUINavigationController  ABC定制视图导航控制器   Subclass of UINavigationController for overwriting ...

  6. Oracle对象-视图和索引

    Oracle 对象-视图 视图概念 ​ 视图就是提供一个查询的窗口,所有的数据来自于原表 创建视图[必须有dba权限] --查询语句创建表 create table emp as select * f ...

  7. Ognl对象图导航语言 源码

    // -------------------------------------------------------------------------- // Copyright (c) 1998- ...

  8. ShareSDK(iOS版)开发实践:自定义授权视图和分享视图导航栏

    最近很多人问ShareSDK的授权视图和分享视图的导航栏样式与应用风格不一致,能否修改导航栏的样式?那么这里我就2.6.1版本进行说明(还在使用1.x版本的朋友建议升级到2.x版本,在新版本中可定制的 ...

  9. react-native-vector-icons的简单使用,图片,按钮,标签视图,导航条

    ICONS是可以直接使用图片名, 就能加载图片的三方,使用很方便, 你不需要在工程文件夹里塞各种图片, 节省很多空间,下面就来看看怎么使用吧! 1. 首先打开terminal进入到我们的工程文件夹下, ...

随机推荐

  1. JS 执行环境与作用域链

    1.执行环境 JavaScript 代码都是在执行环境中被执行的.执行环境是一个概念,一种机制,用来完成JavaScript运行时在作用域.生命周期等方面的处理,它定义了变量或函数是否有权访问其他数据 ...

  2. MVVM知识库总结

    1.关于MVVM概念的理解和实际运用中的解析: http://www.cnblogs.com/hielvis/archive/2011/03/22/1991959.html http://msdn.m ...

  3. Study notes for Clustering and K-means

    1. Clustering Analysis Clustering is the process of grouping a set of (unlabeled) data objects into ...

  4. Codeforces Round #260 (Div. 1) C. Civilization 并查集,直径

    C. Civilization Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/455/probl ...

  5. Codeforces Round #308 (Div. 2)B. Vanya and Books 数学

    B. Vanya and Books Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/552/pr ...

  6. 如何实现一个c/s模式的flv视频点播系统

    一.写在前面 视频点播,是一个曾经很热,现如今依然很热的一项视频服务技术.本人最近致力于研究将各种视频格式应用于点播系统中,现已研究成功FLV, F4V, MP4, TS格式的视频点播解决方案,完全支 ...

  7. Swift2.0 中的String(二):基本操作

    Swift中的字符串,第二篇,基本操作.其他的几篇传送门(GitHub打不开链接的同学请自行把地址github改成gitcafe,或者直接去归档里找:-P): Swift2.0 中的String(一) ...

  8. MyReport:DataGrid的打印和打印预览

    本文说明怎样使用MyReport来实现Flex DataGrid组件的自己主动化打印预览和打印功能. 实现代码 <? xmlversion="1.0" encoding=&q ...

  9. NULL, '\0',0 '0'的区别

    如题,在程序中经常遇到NULL,和'\0',常常疑惑它们是什么关系,其实它们的值是一样的,只不过表现的形式不一样: 1.NULL; NULL 即空指针,在C和C++中的形式不一样,msdn上有如下的内 ...

  10. MR 的 mapper 数量问题

    看到群里面一篇文章涨了贱识 http://www.cnblogs.com/xuxm2007/archive/2011/09/01/2162011.html 之前关注过 reduceer 的数量问题,还 ...