OGNL使用小结(一)
最近一直使用struts2,表现层采用JSP,用的struts2标签,支持OGNL
。 OGNL
中的# $ %使用场景:
1、“#”主要有三种用途:
- 访问OGNL
上下文和Action上下文,#相当于ActionContext.getContext();下表有几个ActionContext中有用的属性:
名称 |
作用 |
例子 |
parameters |
包含当前HTTP请求参数的Map |
#parameters.id[0]作用相当于request.getParameter("id") |
request |
包含当前HttpServletRequest的属性(attribute)的Map |
#request.userName相当于request.getAttribute("userName") |
session |
包含当前HttpSession的属性(attribute)的Map |
#session.userName相当于session.getAttribute("userName") |
application |
包含当前应用的ServletContext的属性(attribute)的Map |
#application.userName相当于application.getAttribute("userName") |
attr |
用于按request > session > application顺序访问其属性(attribute) |
#attr.userName相当于按顺序在以上三个范围(scope)内读取userName属性,直到找到为止 |
- 用于过滤和投影(projecting)集合,如books.{?#this.price<100};
- 构造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。
2、“%”符号的用途
在标志的属性为字符串类型时,计算OGNL
表达式的值。例如在Ognl
.jsp中加入以下代码:
[size=13px]<
hr
/>
<
h3
>
%的用途
</
h3
>
<
p
><
s:url
value
="#foobar['foo1']"
/></
p
>
<
p
><
s:url
value
="%{#foobar['foo1']}"
/></
p
>
清单6 演示%用途的代码片段
3、“$”有两个主要的用途
- 用于在国际化资源文件中,引用OGNL
表达式,例子请参考《在Struts
2.0中国际化(i18n)您的应用程序
》
- 在Struts 2配置文件中,引用OGNL
表达式,如 <action
name="AddPhoto" class="addPhoto">
<interceptor-ref
name="fileUploadStack" />
<result
type="redirect">ListPhotos.action?albumId=${albumId}</result>
</action>
OGNL使用小结(二)
1、OGNL除了支持所有的Java操作符外,还支持以下几种:
1、逗号,
与C语言中的逗号操作符类似。
2、花括号{}
用于创建列表,元素之间用逗号分隔。
3、in和not in
用于判断一个值是否在集合中。
2、访问静态方法和静态字段
@class@method(args) //调用静态方法
@class@field //调用静态字段
其中class必须给出完整的类名(包括包名),如果省略class,那么默认使用的类是java.util.Math,如:
@@min(5,3)
@@max(5,3)
@@PI
3、索引访问
OGNL支持多种索引方式的访问。
1、数组和列表索引
在OGNL中,数组和列表可以大致看成是一样的。
如:array[0]、list[0]。表达式:{’zhangsan’,'lisi’,'wangwu’}[1]等。
2、JavaBean的索引属性
要使用索引属性,需要提供两对setter和getter方法,一对用于数组,一对用于数组中的元素。
如:有一个索引属性interest,它的getter和setter如下
public String[] interest;
public String[] getInterest(){ return interest;}
public void
setInterest(String[] interest){ this.interest=interest;}
public String
getInterest(int i){ return interest[i]}
public void setInterest(int i,
String newInterest){ interest[i]=newInterest;}
对于表达式interest[2],OGNL可以正确解释这个表达式,调用getInterest(2)方法。如果是设置的情况下,会调用setInterest(2,value)方法。
3、OGNL对象的索引属性
JavaBean的索引属性只能使用整型作为索引,OGNL扩展了索引属性的概念,可以使用任意的对象来作为索引。
4、对集合进行操作
1、创建集合:
创建列表
使用花括号将元素包含起来,元素之间使用逗号分隔。如{’zhangsan’,'lisi’,'wangwu’}
创建数组
OGNL中创建数组与Java语言中创建数组类似。
创建Map
Map使用特殊的语法来创建
#{”key”:value, ……}
如果想指定创建的Map类型,可以在左花括号前指定Map实现类的类名。如:
#@java.util.LinkedHashMap@{”key”:”value”,….}
Map通过key来访问,如map["key"]或map.key。
2、投影
OGNL提供了一种简单的方式在一个集合中对每一个元素闻调用相同的方法,或者抽取相同的属性,并将结果保存为一个新的集合,称之为投影。
假如employees是一个包含了employee对象的列表,那么
#employees.{name}将返回所有雇员的名字的列表。
在投影期间,使用#this变量来引用迭代中的当前元素。
如:objects.{#this instanceof String? #this: #this.toString()}
3、选择
OGNL提供了一种简单的方式来使用表达式从集合中选择某些元素,并将结果保存到新的集合中,称为选择。
如#employees.{?#this.salary>3000}
将返回薪水大于3000的所有雇员的列表。
#employees.{^#this.salary>3000}
将返回第一个薪水大于3000的雇员的列表。
#employees.{$#this.salary>3000}
将返回最后一个薪水大于3000的雇员的列表。
5、lambda表达式
lambda表达式的语法是: :[...]。OGNL中的lambda表达式只能使用一个参数,这个参数通过#this引用。
如:
#fact= :[ #this<=1 ? 1 : #this* #fact ( #this-1) ], #fact(30)
#fib= :[#this==0 ? 0 : #this==1 ? 1 : #fib(#this-2)+#fib(#this-1)],
#fib(11)
分享到:
相关推荐
OGNL(Object-Graph ...总结,OGNL作为强大的表达式语言,提供了一种灵活的方式来操作和访问Java对象的属性。通过深入学习和实践,开发者能够有效地利用OGNL进行数据绑定和表达式计算,提升代码的可读性和效率。
**OGNL(Object-Graph Navigation Language)**是一种...总结起来,OGNL是Java开发中的强大工具,特别是在Web框架中,它简化了对象交互和数据绑定。深入理解和掌握OGNL,能够提升代码的灵活性和可读性,提高开发效率。
Struts2 OGNL 表达式总结 OGNL(Object-Graph Navigation Language)是一种基于 Java 的表达式语言,Struts2 框架中使用 OGNL 来访问和操作 ValueStack 中的对象。在 Struts2 中,OGNL 是一个强大的工具,允许...
**ognl标签的使用案例** OGNL (Object-Graph Navigation Language) 是一种强大的表达式语言,主要用于在Java应用程序中获取和设置对象属性。在Web开发领域,尤其是与Struts2框架结合时,OGNL标签被广泛用于视图层,...
总结,OGNL作为强大的表达式语言,其源码揭示了如何高效地处理对象属性访问和动态方法调用。通过深入学习OGNL源码,开发者可以更好地掌握其内部机制,从而在Java应用程序中更灵活、安全地使用OGNL。
OGNL,全称Object-Graph Navigation Language,是一种强大的表达式语言,主要用来获取和设置Java对象的属性。它的设计初衷是解决UI组件和控制器...了解和掌握OGNL的使用,对于从事Java Web开发的人员来说是十分必要的。
总结起来,OGNL是Java生态中一个重要的表达式语言,主要用于对象的导航和数据绑定。了解并熟练使用OGNL能够提升Java应用的灵活性和可维护性,但同时也需要注意安全问题,防止潜在的代码注入攻击。
- Struts2 使用 OGNL 作为默认的表达式语言,并提供了丰富的标签库,例如 `<s:property value="name"/>` 可以用来显示 `name` 属性的值。 #### 三、OGNL 的实现原理 OGNL 实现的核心是 Context 结构,其实质是一个...
总结,OGNL作为Java生态系统中的一个重要组成部分,其源码研究可以帮助开发者更高效地利用这一工具,同时加深对Java反射、动态类型和表达式语言设计的理解。通过深入学习,开发者可以更好地解决实际问题,提升开发...
2. **使用OGNL表达式**:接下来,在JSP页面中使用OGNL表达式展示数据,例如: ```jsp ``` 这里`#request.name`表示从请求范围(request scope)中获取名为`name`的对象。 #### 六、总结 OGNL表达式作为一种强大...
总结来说,Struts2中的OGNL是一个强大而灵活的工具,它简化了对象属性的访问,使我们能够更方便地处理Servlet环境中的对象,以及动态筛选和操作集合。通过理解并熟练掌握OGNL的用法,开发者可以提高代码的可维护性和...
### Struts2中OGNL的使用详解 #### 一、OGNL简介 OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取或设置一个对象图中的属性。它在Struts2框架中扮演着极其重要的角色,是Struts2实现...
- **使用 OGNL 表达式**:通过 OGNL 表达式来获取或设置对象的属性值。 #### 五、OGNL表达式实际应用 在实际应用中,OGNL 表达式经常用于以下场景: - **框架集成**:许多 Java 框架,如 Struts2、Hibernate ...
在Struts2中,EL常用于简单的视图层展示,而OGNL则在Action和拦截器等更深层的逻辑处理中使用。根据实际项目需求和性能考虑,合理选择使用这两种语言。 6. **总结** OGNL和EL都是为了简化数据绑定和表达式处理,...
总结来说,"ognl.rar_OGNL API_og_ognl"这个压缩包对Java开发者,尤其是那些使用Struts2或其他依赖OGNL的框架的开发者来说,是非常有价值的资源。它涵盖了OGNL的基本概念、API使用、源码学习和开发实践,是提升对...
总结来说,Struts2中的OGNL表达式是连接模型和视图的关键工具,它提供了一种强大且灵活的数据访问和操作方式。通过熟练掌握OGNL,开发者可以更高效地构建和维护Struts2应用,同时要注意防止潜在的安全风险。在实际...
总结来说,OpenSymphony公司的OGNL资源包是Java开发中的一个强大工具,提供了灵活的对象导航和数据绑定功能,极大地提高了开发效率。在实际项目中,我们需要熟练掌握OGNL的语法和用法,同时关注其安全问题,确保应用...
当用户提交表单后,Struts 2会使用OGNL解析这些表达式,将数据保存到对应的模型对象中,如`getUser().setUsername()`。而在显示用户信息时,同样可以通过OGNL表达式获取数据,如`getUser.getUsername()`。 **值堆栈...