`

OGNL中的#,%,$ 三种符号

 
阅读更多

 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表达式进行数据处理...

    Struts2 ognl中的#、%和$符号用法说明

    在OGNL表达式中,`#`、`%`和``$`符号扮演着不同的角色,它们是OGNL语法的重要组成部分。下面将详细介绍这三个符号的用法。 1. `#`(哈希符号) `#`在OGNL中代表“上下文引用”或“值栈引用”。在Struts2中,请求...

    #和$的区别

    **OGNL**(Object-Graph Navigation Language)是一种强大的表达式语言,用于获取或设置Java对象图中的属性。在Struts2框架中,OGNL表达式被广泛应用于处理请求数据、展示数据以及进行逻辑判断等场景。它极大地简化了...

    OGNL表达式中的#、%和$.txt

    综上所述,“#”、“%”和“$”这三个符号在OGNL表达式中的使用各有侧重。“#”主要用于访问不同作用域中的变量;“%”则是在XML配置文件中使用OGNL表达式的一种特殊语法;而“$”符号则主要用于模板文件中OGNL...

    ONGL中(#.%.$)三种符号的用法.pdf

    本文将深入探讨OGNL中`#`,`%`,`$`这三个特殊符号的用法。 首先,`#`符号在OGNL中的主要作用是访问Stack Context中的值,以及创建和访问特定的命名对象。例如,`#parameters`对象可以用来获取HTTP请求参数,`#...

    ONGL中(#.%.$)三种符号的用法.docx

    在给定的文档中,我们关注的是`#.%.$`这三种符号在OGNL中的用法。以下是它们的具体解释: 1. `#`:此符号在OGNL中代表Action Context。在Struts2中,Action Context包含了请求、会话、应用范围内的属性,以及Value ...

    struts2.0标签$ # %的区别

    ### Struts2.0 标签 $ # % 的区别详解 #### 一、概述 Struts2框架作为Java Web开发中的重要组成部分,在处理MVC架构时提供了强大的支持。...掌握这些符号的使用,对于高效地开发基于Struts2的应用程序至关重要。

    % # $ 的区别 及用法

    ### `% # $`的区别及用法 在Struts2框架中,`%`, `#`, `$` 这三...通过以上分析,我们可以看出 `%`, `#`, `$` 这三个符号在Struts2中的应用场景各有不同,合理选择和使用这些符号可以帮助开发者更高效地完成开发任务。

    OGNL符号的使用

    OGNL 符号的使用 OGNL(Object-Graph Navigation Language)是一...OGNL 表达式在 Struts2 中的使用非常广泛,开发者需要充分了解“%”、“#”、“$”这三个符号的使用规则,以便更好地使用 OGNL 表达式提高开发效率。

    ognl表达式java使用案例详解(测试通过)

    本案例提供ognl使用详解,测试通过,只需解压放入自己WEB项目中,执行struts_ognl包内java文件即可(未提供jia包,若需要可以联系留言发至邮箱),若测试不好可以联系本人提供指导. Struts 2默认的表达式语言是OGNL...

    OGNL语言中文资料

    三、OGNL在Spring和Struts2中的应用 1. **Spring框架**:在Spring中,OGNL用于SpEL(Spring Expression Language),主要用于配置文件中的占位符解析、AOP表达式、Bean属性注入等。 2. **Struts2框架**:Struts2的...

    struts2 ognl的用法

    在Struts2中使用OGNL表达式主要涉及以下几种符号:“#”、“%”和“$”。 ##### 1. “#”符号的使用 - **访问Struts2上下文**: - `#`可用于访问当前的`ActionContext`,如`#ActionContext.getContext()`。 - ...

    OGNL教程,简单,看完懂OGNL语言

    OGNL,全称Object-...总结来说,OGNL是一种强大的Java对象导航语言,尤其在Web开发中,它简化了视图和控制器之间的数据交换,提升了开发效率。了解和掌握OGNL的使用,对于从事Java Web开发的人员来说是十分必要的。

    OGNL表达式

    OGNL表达式作为一种强大且灵活的工具,极大地简化了Struts2框架中的数据访问和处理流程。通过对OGNL表达式的深入了解和掌握,开发者能够更加高效地构建复杂的Web应用程序,同时提高代码的可读性和可维护性。

    ognl图形导航语言

    OGNL,全称为Object-Graph Navigation Language,是一种强大的开源表达式语言,主要用于便捷地操作对象的属性和方法。在Struts2框架中,OGNL作为默认的表达式语言发挥着核心作用,允许开发者以简洁的方式访问和修改...

    struts2中OGNL的一些概念及原理说明

    4. **OGNL的六种使用方法**:在实际应用中,OGNL表达式具有多种用途,包括但不限于: - **基本用法**:如上例所示,直接通过对象属性的方式来访问或设置数据。 - **转换为字符串**:有时需要将OGNL表达式的结果...

    STRUTS2标签中符号_,$,%的用法示例.doc

    在STRUTS2的标签中,`#`,`$`, `%`这三种特殊符号扮演着重要的角色,尤其是在处理OGNL表达式时。下面将详细解释这三个符号的用途。 1. `#` 符号: - **访问非根对象属性**:在STRUTS2中,ActionContext是默认的根...

    Struts 2中的OGNL教程

    ### Struts 2 中的 OGNL 教程 #### 一、OGNL 概述 OGNL(Object-Graph Navigation Language)是一种用于方便地操作对象属性的开源表达式语言。这种语言允许开发者以一种非常直观的方式来访问和修改对象属性,从而...

    OGNL静态方法定义

    5. `@`符号在OGNL中的使用:在OGNL表达式中,`@`符号用来引用对象。例如,`@myObject@myProperty`表示访问`myObject`的`myProperty`属性。 6. OGNL表达式支持的方法调用和运算符:OGNL不仅可以访问属性,还可以直接...

Global site tag (gtag.js) - Google Analytics