OGNL的用法
OGNL是通常要结合Struts 2的标志一起使用,如<s:property value="xx" />等。大家经常遇到的问题是#、%和$这三个符号的使用。下面我想通过例子讲述这个问题:
“#”主要有三种用途:
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};
3.构造Map,如#{'foo1':'bar1', 'foo2':'bar2'}。
package tutorial.action;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.apache.struts2.interceptor.SessionAware;
import org.apache.struts2.util.ServletContextAware;
import tutorial.model.Book;
import com.opensymphony.xwork2.ActionSupport;
public class OgnlAction extends ActionSupport implements ServletRequestAware, SessionAware, ServletContextAware {
private static final long serialVersionUID = 1L;
private HttpServletRequest request;
private Map<String, String> session;
private ServletContext application;
private List<Book> books;
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
@SuppressWarnings("unchecked")
public void setSession(Map session) {
this.session = session;
}
public void setServletContext(ServletContext application) {
this.application = application;
}
public List<Book> getBooks() {
return books;
}
@Override
public String execute() {
request.setAttribute("userName", "Max From request");
session.put("userName", "Max From session");
application.setAttribute("userName", "Max From application");
books = new LinkedList<Book>();
books.add(new Book("978-0735619678", "Code Complete, Second Edition", 32.99));
books.add(new Book("978-0596007867", "The Art of Project Management", 35.96));
books.add(new Book("978-0201633610", "Design Patterns: Elements of Reusable Object-Oriented Software", 43.19));
books.add(new Book("978-0596527341", "Information Architecture for the World Wide Web: Designing Large-Scale Web Sites", 25.19));
books.add(new Book("978-0735605350", "Software Estimation: Demystifying the Black Art", 25.19));
return SUCCESS;
}
}
2、“%”符号的用途是在标签的属性值被理解为字符串类型时,告诉执行环境%{}里的是OGNL表达式。
这是一开始最让我不能理解的符号,原因是一些相关资源在表述时不太准备,经过一翻痛苦的探索,终于明白了它的用途。实际上就是让被理解为字符串的表达式,被真正当成ognl来执行。很有点类似javascript里面的eval_r()功能,例如:
var oDiv = eval_r("document.all.div"+index)
当index变量为1时,语句就会被当作var oDiv = document.all.div1 var oDiv = document.all.div1来执行。%{}就是起这个作用。举例:
<s:set name="myMap" value="#{'key1':'value1','key2':'value2'}"/>
<s:property value="#myMap['key1']"/>
<s:url value="#myMap['key1']" />
上面的代码第2行会在页面上输出“value1”,而第3行则会输出"#myMap['key1']"这么一个字符串。如果将第3行改写成这样:
<s:url value="%{#myMap['key1']}"/>
则输出为“value1”。
这说明struts2里不同的标签对ognl的表达式的理解是不一样的。
如果当有的标签“看不懂”类似“#myMap['key1']”的语句时,就要用%{}来把这括进去,“翻译”一下了。
3·“$”有两个主要的用途
1. 用于在国际化资源文件中,引用OGNL表达式
2. 在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表达式中,`#`、`%`和``$`符号扮演着不同的角色,它们是OGNL语法的重要组成部分。下面将详细介绍这三个符号的用法。 1. `#`(哈希符号) `#`在OGNL中代表“上下文引用”或“值栈引用”。在Struts2中,请求...
**OGNL**(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取或设置Java对象图中的属性。在Struts2框架中,OGNL表达式被广泛应用于处理请求数据、展示数据以及进行逻辑判断等场景。它极大地简化了...
综上所述,“#”、“%”和“$”这三个符号在OGNL表达式中的使用各有侧重。“#”主要用于访问不同作用域中的变量;“%”则是在XML配置文件中使用OGNL表达式的一种特殊语法;而“$”符号则主要用于模板文件中OGNL...
本文将深入探讨OGNL中`#`,`%`,`$`这三个特殊符号的用法。 首先,`#`符号在OGNL中的主要作用是访问Stack Context中的值,以及创建和访问特定的命名对象。例如,`#parameters`对象可以用来获取HTTP请求参数,`#...
在给定的文档中,我们关注的是`#.%.$`这三种符号在OGNL中的用法。以下是它们的具体解释: 1. `#`:此符号在OGNL中代表Action Context。在Struts2中,Action Context包含了请求、会话、应用范围内的属性,以及Value ...
### Struts2.0 标签 $ # % 的区别详解 #### 一、概述 Struts2框架作为Java Web开发中的重要组成部分,在处理MVC架构时提供了强大的支持。...掌握这些符号的使用,对于高效地开发基于Struts2的应用程序至关重要。
### `% # $`的区别及用法 在Struts2框架中,`%`, `#`, `$` 这三...通过以上分析,我们可以看出 `%`, `#`, `$` 这三个符号在Struts2中的应用场景各有不同,合理选择和使用这些符号可以帮助开发者更高效地完成开发任务。
OGNL 符号的使用 OGNL(Object-Graph Navigation Language)是一...OGNL 表达式在 Struts2 中的使用非常广泛,开发者需要充分了解“%”、“#”、“$”这三个符号的使用规则,以便更好地使用 OGNL 表达式提高开发效率。
本案例提供ognl使用详解,测试通过,只需解压放入自己WEB项目中,执行struts_ognl包内java文件即可(未提供jia包,若需要可以联系留言发至邮箱),若测试不好可以联系本人提供指导. Struts 2默认的表达式语言是OGNL...
三、OGNL在Spring和Struts2中的应用 1. **Spring框架**:在Spring中,OGNL用于SpEL(Spring Expression Language),主要用于配置文件中的占位符解析、AOP表达式、Bean属性注入等。 2. **Struts2框架**:Struts2的...
在Struts2中使用OGNL表达式主要涉及以下几种符号:“#”、“%”和“$”。 ##### 1. “#”符号的使用 - **访问Struts2上下文**: - `#`可用于访问当前的`ActionContext`,如`#ActionContext.getContext()`。 - ...
OGNL,全称Object-...总结来说,OGNL是一种强大的Java对象导航语言,尤其在Web开发中,它简化了视图和控制器之间的数据交换,提升了开发效率。了解和掌握OGNL的使用,对于从事Java Web开发的人员来说是十分必要的。
OGNL表达式作为一种强大且灵活的工具,极大地简化了Struts2框架中的数据访问和处理流程。通过对OGNL表达式的深入了解和掌握,开发者能够更加高效地构建复杂的Web应用程序,同时提高代码的可读性和可维护性。
OGNL,全称为Object-Graph Navigation Language,是一种强大的开源表达式语言,主要用于便捷地操作对象的属性和方法。在Struts2框架中,OGNL作为默认的表达式语言发挥着核心作用,允许开发者以简洁的方式访问和修改...
4. **OGNL的六种使用方法**:在实际应用中,OGNL表达式具有多种用途,包括但不限于: - **基本用法**:如上例所示,直接通过对象属性的方式来访问或设置数据。 - **转换为字符串**:有时需要将OGNL表达式的结果...
在STRUTS2的标签中,`#`,`$`, `%`这三种特殊符号扮演着重要的角色,尤其是在处理OGNL表达式时。下面将详细解释这三个符号的用途。 1. `#` 符号: - **访问非根对象属性**:在STRUTS2中,ActionContext是默认的根...
### Struts 2 中的 OGNL 教程 #### 一、OGNL 概述 OGNL(Object-Graph Navigation Language)是一种用于方便地操作对象属性的开源表达式语言。这种语言允许开发者以一种非常直观的方式来访问和修改对象属性,从而...
5. `@`符号在OGNL中的使用:在OGNL表达式中,`@`符号用来引用对象。例如,`@myObject@myProperty`表示访问`myObject`的`myProperty`属性。 6. OGNL表达式支持的方法调用和运算符:OGNL不仅可以访问属性,还可以直接...