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属性,直到找到为止 |
|
|
|
2. 用于过滤和投影(projecting)集合,如books.{?#this.price<100}; |
(1)投影:在一个集合中对每一个元素调用相同的方法,或抽取相同的属性,并将结果保存为一个新的集合 |
如果employees是一个包含employee对象的列表,那么#employees.{name}将返回所有雇员的名字的列表 |
在投影期间,使用#this变量来引用迭代中的当前元素。 |
|
|
|
|
(2)过滤(选择):从集合中选择某些元素,并将结果保存到新的集合中。 |
选择操作符有:?:选择满足条件的所有元素; |
|
如:#employees.{?#this.salary>3000}返回薪水大于3000的所有雇员的列表; |
^:选择满足条件的第一个元素; |
|
如:#employees.{^#this.salary>3000}将返回第一个薪水大于3000的雇员的列表; |
$:选择满足条件的最后一个元素; |
|
如:#employees.{$#this.salary>3000}将返回最后一个薪水大于3000的雇员的列表; |
|
|
|
3. 构造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。 |
|
如果想指定创建的Map类型,可以在左花括号前指定Map实现的类名。例如:#@java.util.HashMap@{'foo1':'bar1','foo2':'bar2'} |
Map通过key来访问,如map['key']或map.key |
|
|
|
|
“%”符号的用途 |
|
|
|
“%”符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值 |
<p><s:url value="#foobar['foo1']" /></p>
<p><s:url value="%{#foobar['foo1']}" /></p>
刷新页面,结果如下所示: |
#foobar['foo1']?userName=Max+From+parameters; |
bar1?userName=Max+From+parameters; |
“$”有两个主要的用途 |
|
|
用于在国际化资源文件中,引用OGNL表达式, |
|
|
|
|
在Struts 2配置文件中,引用OGNL表达式 |
<action name="AddPhoto" class="addPhoto">
<interceptor-ref name="fileUploadStack" />
<result type="redirect">ListPhotos.action?albumId=${albumId}</result>
</action>
分享到:
相关推荐
综上所述,`#`、`%`和`$`这三个符号在OGNL表达式中扮演着不同的角色,分别用于访问根对象属性、计算字符串类型的表达式值以及引用OGNL表达式。熟练掌握它们的用法可以帮助开发者更高效地利用OGNL表达式进行数据处理...
综上所述,“#”、“%”和“$”这三个符号在OGNL表达式中的使用各有侧重。“#”主要用于访问不同作用域中的变量;“%”则是在XML配置文件中使用OGNL表达式的一种特殊语法;而“$”符号则主要用于模板文件中OGNL...
在OGNL表达式中,`#`、`%`和``$`符号扮演着不同的角色,它们是OGNL语法的重要组成部分。下面将详细介绍这三个符号的用法。 1. `#`(哈希符号) `#`在OGNL中代表“上下文引用”或“值栈引用”。在Struts2中,请求...
#### 六、OGNL表达式在List和Map中的应用 OGNL不仅支持简单的属性访问,还支持复杂数据结构如List和Map的操作。 - **使用OGNL操作List**: ```jsp ,'xiaoi','liming'}"/> <s:iterator value="#list" id="n"> ...
本案例提供ognl使用详解,测试通过,只需解压放入自己WEB项目中,执行struts_ognl包内java文件即可(未提供jia包,若需要可以联系留言发至邮箱),若测试不好可以联系本人提供指导. Struts 2默认的表达式语言是OGNL...
### JS:ognl表达式详解 #### 一、OGNL表达式概述 OGNL (Object-Graph Navigation Language) 是一种强大的表达式语言,用于获取和设置 Java 对象的属性。它最初是由 John Rose 和 Luke Blanshard 开发,并被广泛...
OGNL表达式作为一种强大且灵活的工具,极大地简化了Struts2框架中的数据访问和处理流程。通过对OGNL表达式的深入了解和掌握,开发者能够更加高效地构建复杂的Web应用程序,同时提高代码的可读性和可维护性。
9. **OGNL在视图层的应用**:在JSP或其他视图技术中,可以通过OGNL表达式动态地显示和操作数据,如`${user.name}`。 10. **OGNL与拦截器**:Struts2的拦截器机制允许在执行Action之前或之后对数据进行处理,而OGNL...
struts2 中 OGNL表达式的使用struts2 中 OGNL表达式的使用
这篇深入学习的文章主要探讨了OGNL表达式的原理和使用。 首先,我们来理解一下OGNL是什么。OGNL是一种强大的表达式语言,允许开发者通过简单的字符串表达式来访问和修改对象图。在Struts2中,OGNL用于在Action和...
总结来说,Struts2中的OGNL表达式是连接模型和视图的关键工具,它提供了一种强大且灵活的数据访问和操作方式。通过熟练掌握OGNL,开发者可以更高效地构建和维护Struts2应用,同时要注意防止潜在的安全风险。在实际...
在Struts2中,`%` 主要用于表达式语言(EL)中的特殊用途,尤其是在处理OGNL表达式时。它主要用于处理HTML标签内的OGNL表达式。具体来说: - **用法**:`%{expression}` 表示一个OGNL表达式的计算结果。这个表达式...
总结来说,`#`,`%`,`$`在OGNL表达式中分别扮演了不同的角色,`#`提供了对上下文对象的访问,`$`简化了对ValueStack中对象属性的引用,而`%`则在特定运算中发挥作用。理解这些符号的用法对于有效利用Struts2框架进行...
当用户提交数据时,OGNL表达式会将数据保存到栈顶的对象中。完成业务逻辑后,栈顶的对象可以通过OGNL表达式获取并展示结果。 以下是一个简单的示例,演示了如何使用`OgnlValueStack`: ```java // 创建Action对象 ...
- **用途**:主要用于将文本属性解析为OGNL表达式,适用于原本是OGNL表达式的场景。 - **注意事项**:对于已经是OGNL表达式的属性不起作用。 - **示例**: ```xml <s:property value="%{username}" /> ``` 这里`...
在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取和设置对象的属性。在给定的文档中,我们关注的是`#.%.$`这三种符号在OGNL中的用法。以下是它们的具体解释: 1. `#`:此...
1. **表达式语法**:OGNL表达式通常由对象引用、属性访问、方法调用和运算符组成。例如,`user.name`表示访问用户对象的name属性,而`list[0].title`则表示访问列表的第一个元素的title属性。 2. **上下文(Context...
开发者可以通过OGNL表达式从值栈中轻松获取和修改数据。 1. **OGNL的属性访问** - 使用`.`或`['']`访问对象属性。例如,`object.property`和`object['property']`都是访问对象的`property`属性。当属性名包含特殊...
总的来说,这个案例将帮助我们理解如何在Struts2中使用OGNL表达式来实现数据的展示和操作,以及如何通过Struts2的标签库更好地利用OGNL的功能。通过学习和实践,开发者可以提高Web应用程序的可维护性和灵活性。
OGNL表达式可以在一个上下文中执行,这个上下文包含了变量和对象。在Struts2中,Action上下文就是OGNL的默认上下文,其中包含了Action实例和其他请求相关的对象。 三、OGNL与Struts2的结合 1. 表单绑定:Struts2...