`
langgufu
  • 浏览: 2288819 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Struts中OGNL与EL表达式

 
阅读更多
  1. <span style="font-size: large;"><span style="font-size: large;"><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
  2. <%@ taglib uri="/struts-tags" prefix="s" %>  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  4. <html>  
  5.   <head>  
  6.     <title>OGNL的使用</title>  
  7.   </head>  
  8.   <body>  
  9. <h3>OGNL的使用</h3><hr/>  
  10.  访问Action中的普通属性: <s:property value="loginname"/><br/>  
  11.  访问Action中的对象属性: <s:property value="user.birthday"/><br/>  
  12.  访问Action中的Set属性: <s:property value="courseSet.toArray()[0]"/><br/>  
  13.  访问Action中的List属性: <s:property value="list[0]"/><br/>  
  14.  访问Action中的Map属性的键: <s:property value="map.keys.toArray()[1]"/><br/>  
  15.  访问Action中的Map属性的值: <s:property value="map.values.toArray()[1]"/><br/>  
  16. 访问Action中的Map属性的指定键对应的值: <s:property value="map['z']"/><br/>   
  17. 访问Action中的Map属性的大小: <s:property value="map.size"/><br/>   
  18. <hr/>  
  19. 访问ActionContext中的普通属性:<s:property value="#inte"/><br/>  
  20. 访问ActionContext中的对象属性:<s:property value="#user2.loginname"/><br/>  
  21. <hr/>  
  22. 访问Action中的普通方法:<s:property value="getAppName()"/><br/>  
  23. 访问ActionContext中的某个对象上的普通方法:<s:property value="#user2.info()"/><br/>  
  24. <hr/>  
  25. 访问静态属性:<s:property value="@java.lang.Math@PI"/><br/>  
  26. 访问静态方法:<s:property value="@java.lang.Math@floor(44.56)"/><br/>  
  27. 访问Math类中的静态方法:<s:property value="@@floor(44.56)"/><br/>  
  28. <hr/>  
  29. 调用java.util.Date的构造方法:<s:date name="new java.util.Date()" format="yyyy-MM-dd HH:mm:ss"/><br/>  
  30. 调用java.util.Date的构造方法创建对象,再调用它的方法:<s:property value="new java.util.Date().getTime()"/><br/>  
  31. <hr/>  
  32. 投影查询:获取userList中所有loginname的列表:<s:property value="userList.{loginname}"/><br/>  
  33. 选择查询:获取userList中所有score大于60的loginname列表:<s:property value="userList.{?#this.score>60.0}.{loginname}"/><br/>  
  34. 选择查询:获取userList中所有score大于60并且gender为true的loginname列表:<s:property value="userList.{?(#this.score>60.0 && #this.gender)}.{loginname}"/><br/>  
  35. 选择查询:获取userList中所有score大于60并且gender为true的第一个元素的loginname:<s:property value="userList.{^(#this.score>60.0 && #this.gender)}.{loginname}"/><br/>  
  36. 选择查询:获取userList中所有score大于60并且gender为true的最后一个元素的loginname:<s:property value="userList.{$(#this.score>60.0 && #this.gender)}.{loginname}"/><br/>  
  37. <hr/>  
  38. 访问名为xxx的请求参数对应的第一个值:<s:property value="#parameters.xxx[0]"/><br/>  
  39. 访问通过ActionContext中放入Request中的属性:<s:property value="#request.reqAtt"/><br/>  
  40. 访问通过ServletActionContext中放入Request中的属性:<s:property value="#request.reqAtt2"/><br/>  
  41.   
  42. 访问通过ActionContext中放入Session中的属性:<s:property value="#session.sesAtt"/><br/>  
  43. 访问通过ServletActionContext中放入Session中的属性:<s:property value="#session.sesAtt2"/><br/>  
  44. 访问通过ActionContext中放入ServletContext中的属性:<s:property value="#application.appAtt"/><br/>  
  45. 访问通过ServletActionContext中放入ServletContext中的属性:<s:property value="#application.appAtt2"/><br/>  
  46.   
  47. 直接访问属性域中指定名称的属性对应的值:<s:property value="#attr.sesAtt2"/><br/>  
  48. <br/><br/><hr/>  
  49. <s:iterator value="userList" status="vs">  
  50.     <s:if test="%{#vs.odd}">  
  51.         <span style="color: red">  
  52.             <s:property value="#vs.count"/>: <s:property value="loginname"/>,<s:date name="birthday" format="yyyy-MM-dd HH:mm:ss"/><br/>  
  53.         </span>  
  54.     </s:if>  
  55.     <s:else>  
  56.         <span style="color: blue">  
  57.             <s:property value="#vs.count"/>: <s:property value="loginname"/>,<s:date name="birthday" format="yyyy-MM-dd HH:mm:ss"/><br/>  
  58.         </span>  
  59.     </s:else>  
  60. </s:iterator>  
  61.   
  62. <hr/><s:debug/>  
  63.   </body>  
  64. </html></span></span>  

 

总结:

在上边大家都好奇为什么都用struts的S标签,因为OGNL是通常要结合Struts 2的标志一起使用,如<s:property value="xx" />

 

 Action类与JSP页面之间的数据传递

 1) 通过HttpServletRequest,HttpSession,ServletContext来传递数据。

    a) Action中传数据:在Action类的请求处理方法中先获取各个作用域对象

    ServletActionContext.getRequest();

    ServletActionContext.getRequest().getSession();

    ServletActionContext.getServletContext();

          然后调用相应的setAttribute(String "键", Object 值);

    b) 在JSP页面中取数据:可以使用EL表达式或代码片段来取出对应作用域中属性值。

    c) 页面中的请求参数传递到Action中时,Action中直接定义对应名称的属性,并提供setter方法即可封装此数据。

    

 2) 通过ActionContext实例来传递数据。 ActionContext针对每个正在执行Action的线程中绑定一份。

   a) Action中通过ActionContext传递数据。

      ActionContext提供了put(String "键", Object 值);  //数据不会映射到HttpServletRequest中。

      ActionContext提供的getSession().put(String "键", Object 值);  //数据会自动映射到HttpSession中。

      ActionContext提供的getApplication().put(String "键", Object 值); //数据会自动映射到ServletContext中。

   b) 在JSP页面取数据:struts2推荐使用OGNL来取ActionContext中的数据。

 

 

1. Struts2中的OGNL的使用。

 

2. OGNL:对象图导航语言。通过OGNL表达式可以获取对象的属性,调用对象的方法,或构造出对象。

  1) OGNL上下文中有一个根对象。这个根对象可以直接获取。不需要#。

  2)支持常量:

         字符串常量、字符常量、

         数值常量:int、long、float、double

         布尔常量:true、false

    Null常量 : null

         支持操作符:支持Java的所有操作符,还支持特有的操作符: ,、 {}、in、not in;

 

 Struts2中的OGNL:

  1) Struts2将ActionContext设置为OGNL上下文,并将值栈(ValueStack)作为OGNL的根对象放置到ActionContext中。

  2) Struts2总是把当前Action实例放置在值栈的栈顶。所以,在OGNL中引用Action中的属性也可以省略“#”。

  

 常用标签

 1) <s:property value="OGNL"/>

 2) <s:date name="OGNL" format=""/>

 3) <s:if test="OGNL"></s:if><s:elseif test="OGNL"></s:elseif><s:else></s:else>

★4) <s:iterator value="OGNL" status="vs">...</s:iterator>

 5) <s:debug/>

 

 

struts2中#、%和$这三个符号的使用方法【摘自max struts2教程】 

 

一、"#"的用法 

   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'}。 

 

二、"%"的用法 

    “%”符号的用途是在标志的属性为字符串类型时,计算OGNL表达式的值。例如在Ognl.jsp中加入以下代码: 

    <h3>%的用途</h3> 

    <p><s:url value="#foobar['foo1']" /></p> 

    <p><s:url value="%{#foobar['foo1']}" /></p> 

 

三、"$"的用法 

    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和el区别

    struts2中ognl和el区别,帮助大家写表达式。

    OGNL表达归纳

    3.由于ValueStack(值栈)是Struts 2中OGNL的根对象,如果用户需要访问值栈中的对象,在JSP页面可以直接通过下面的EL表达式访问ValueStack(值栈)中对象的属性 4.为何使用EL表达式能够访问valueStack中对象的属性 原因...

    OGNL表达式语言.txt

    相对EL表达式,它提供了平时我们需要的一些功能,如: ? 支持对象的方法调用 ,如 xxx.sayHello(); ? 支持类静态方法调用和值的访问,表达式的格式为@[类全名]@[方法名|值名],例如:@java.lang.String@format(...

    struts2中的OGNL.ppt

    Struts2的一个关键特性就是它可以对Action携带的数据进行读写访问,例如在前面我们在表单中使用user.username指定数据传递给Action的user对象的username属性,在元素中使用user.username来获取用户的名字,这是通过...

    struts2中ognl的源代码

    OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,...

    Struts2用到的核心jar包

    用来支持ognl表达式的,类似于EL表达式,功能比EL表达式强大的多。 freemarker-2.3.15.jar freemarker是比jsp更简单好用,功能更加强大的表现层技术,用来替代jsp的。 在Struts2中提倡使用 freemarker模板,但实际...

    Struts2核心包

    ognl-3.0.jar:对象图导航语言(Object Graph Navigation Language),它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,...

    struts2下ognl源代码

    OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,...

    最新Struts2 jar 架包

    整理了1个上午 Oracle+Weblogic,主要内容如下: struts2-core-2.1.8.jar Struts2的核心包 struts2-json-plugin-2.1.8.jar json进行异步...ognl-2.7.3.jar OGNL表达式语言,struts2支持该EL antlr-2.7.6.jar HQL解析

    Spring MVC 开发一般步骤详述

    4 EL表达式 OGNL表达式的使用 5 jquery UI的使用 6 工具类的编写 一般根据自己的需求 "&gt;本人将Spring MVC的一般开发步骤做了一个详细的记录 有相关截图 相关核心代码 为懂各个java代码但是不会整合开发的朋友提供一...

    struts学习笔记(4)

    15.OGNL表达式 对象图导航语言 Object Graph Navigation Language 是一种比较强大的表达式语言(比EL表达式的功能...1)ognl表达式只能写在Struts2标签的里面(任何一个struts2标签都行) EL表达式可以写在页面的任何位置

    struts-2.3.16.2-src

    开发工具包.里边包含struts2中所有开发需要的包,其中包含commons-logging-1.0.4.jar 日志管理 ...OGNL表达式语言,struts2支持该EL struts2-core.jar struts2的核心库 xwork.jar webwork的核心库等

    Struts2中关于ValueStack的一些操作

    2、 EL,全称Express Language,即表达式语言。不要被语言吓倒,它是简单的对象导航语言。有字符串(例如:方法名)和特殊字符组成(例如用.表示调用对应的属性方法)。通过EL,我们可以存、取对象数据,而且还可以...

    struts必须jar包

    struts2-core-2.1.8.jar Struts2的核心包 struts2-json-plugin-2.1.8.jar json进行异步刷新操作(非必要) xwork-core-2.1.6.jar Command...ognl-2.7.3.jar OGNL表达式语言,struts2支持该EL antlr-2.7.6.jar HQL解析

    struts.jar

    struts2-core-2.1.8.jar Struts2的核心包 struts2-json-plugin-2.1.8.jar json进行异步刷新操作(非必要) xwork-core-2.1.6.jar Command模式框架,WebWork和Struts2...ognl-2.7.3.jar OGNL表达式语言,struts2支持该EL

    struts必备jar包

    commons-logging-1.0.4.jar 使用spring的必备包,用来记录程序运行时的活动的日志...OGNL表达式语言,struts2支持该EL struts2-core-2.0.10.jar struts2的核心库 xwork-2.0.4.jar webwork的核心库,自然需要它的支持

    web项目常用jar包及说明.zip

    Struts 2需要的jar包: 1.commons-fileupload.jar(commons项目中的关于...EL表达式:jstl.jar excel表格:jxl.jar 操作pdf文件:iText-5.0.5.jar 统计图(JFreechart两个):jcommon-1.0.10.jar,jfreechart-1.0.6.jar

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    6.3 EL表达式的应用 6.3.1 EL的基本语法. 6.3.2 EL的运算符 6.3.3 EL的隐含对象 6.4 JSTL核心标签库的应用 6.4.1 数据访问标签 6.4.2 流程控制标签 6.4.3 循环标签 6.5 JSTL格式标签库的应用 6.5.1 使用格式化数字 ...

    java从入门到精通70个PPT

    2.变量、数据类型和运算符和表达式 3运算符和程序流程结构 4.数组 5.类和对象 6.字符串 7.封装,继承,多肽 8.接口与抽象类 9.java集合类 10.jdbc 11 html简介与js的基本语法 12 javascript内置对象和内置函数 13 ...

Global site tag (gtag.js) - Google Analytics