`
lq38366
  • 浏览: 4385 次
社区版块
存档分类
最新评论

struts2 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(Object-Graph Navigation Language)和EL(Expression Language)都是用于数据绑定和表达式处理的重要工具,它们在处理视图层与模型层的数据交互方面发挥着关键作用。理解这两者的差异有助于...

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

    ### Struts2中OGNL的概念及原理说明 #### 一、OGNL表达式的基本用法与特点 ...综上所述,OGNL和EL表达式在Struts2框架中扮演着重要角色,掌握这些概念和技巧有助于开发者更加高效地进行Web应用程序的开发。

    struts2 ognl

    通过阅读《OGNL语言指南.pdf》和《struts2_OGNL.doc》文档,你可以深入了解OGNL的详细语法、使用技巧以及在Struts2中的最佳实践。对于Struts2开发者来说,掌握OGNL不仅可以提高开发效率,也能更好地理解和解决可能...

    Struts2-OGNL.rar_ognl

    在Struts2中,OGNL(Object-Graph Navigation Language)扮演着核心角色,它是一种强大的表达式语言,用于在Action类和JSP页面之间交换数据。下面我们将深入探讨OGNL的基本概念、特性以及在Struts2中的应用。 1. ...

    struts2-OGNL表达式测试

    在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于访问和操作对象图。这个“struts2-OGNL表达式测试”可能是一个测试项目或代码示例,旨在演示如何在Struts2应用中使用OGNL表达式...

    struts2中的ognl

    Struts2是一个流行的Java web开发框架,而OGNL(Object-Graph Navigation Language)是它用于表达数据绑定和表达式语言的核心组件。在Struts2中,OGNL被广泛用于访问和操作应用程序中的对象属性,包括在请求、参数、...

    Struts2 如何使用OGNL表达式(三十八)

    在Struts2中,OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,用于在视图层和模型层之间进行数据绑定和表达式计算。本文将深入探讨如何在Struts2中有效地使用OGNL表达式。 首先,OGNL是Struts2的...

    struts2.0中的ognl

    4. EL(表达式语言)增强:OGNL作为Struts2的默认EL,提供更丰富的功能,比如可以方便地访问集合、索引、Map等数据结构。 三、OGNL表达式语法 OGNL表达式的语法十分灵活,主要包括以下几个部分: - 属性访问:如`...

    struts2标签和OGNL表达式.pdf

    通过OGNL和EL的结合使用,Struts2框架可以很方便地进行数据的传递和页面的动态渲染。例如,可以使用标签在JSP页面中显示Action中的name属性值。这种方式简化了JSP页面中对后端数据的访问,使得JSP页面更专注于视图...

    struts2标签和OGNL表达式

    OGNL(Object Graph Navigation Language)是一种强大的表达式语言,广泛应用于Struts 2框架中,用以在视图层和模型层之间进行数据传递。相比EL(Expression Language)表达式,OGNL提供更丰富的功能,如对象方法...

    表达式与言EL和OGNL

    当用户提交表单后,Struts 2会使用OGNL解析这些表达式,将数据保存到对应的模型对象中,如`getUser().setUsername()`。而在显示用户信息时,同样可以通过OGNL表达式获取数据,如`getUser.getUsername()`。 **值堆栈...

    struts2中的OGNL.ppt

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

    Struts2的OGNL详解

    OGNL是Struts2的核心特性之一,Struts2使用OGNL来替代原先的EL表达式语言。Struts2将OGNL作为一个库集成到项目中,这使得Struts2在处理表单字段(如text field、hidden)方面更加灵活。与Struts1.x中的form bean相比...

    struts1和struts2的区别

    它分为两个版本:Struts1 和 Struts2。虽然两者都基于模型-视图-控制器(MVC)设计模式,但它们之间存在诸多差异。了解这些差异对于选择合适的技术栈、优化开发流程至关重要。 #### Action处理机制 - **Struts1**:...

    留言板留言板struts2留言板struts2

    5. **OGNL(Object-Graph Navigation Language)**:Struts2使用OGNL作为默认表达式语言,用于在Action和视图之间传递数据。通过OGNL,可以在JSP页面中直接访问Action中的属性,或者在Action中动态设置模型数据。 6. ...

    Struts1和Struts2的区别和对比

    Struts2引入了更强大的OGNL,提供了更灵活的对象图遍历和类型转换。 页面绑定方面,Struts1依赖JSP标准机制,而Struts2采用ValueStack技术,允许taglib直接访问值栈中的对象,无需在视图和对象之间建立直接绑定,...

    第四章:struts2中的OGNL.ppt

    第四章:Struts2中的OGNL.ppt详细探讨了Struts2框架中使用OGNL(Object-Graph Navigation Language,对象图导航语言)的关键概念和技术。OGNL作为一种强大的表达式语言,使得开发者能够方便地访问Action携带的数据,...

    Struts2--5.OGNL

    在Struts2框架中,OGNL(Object-Graph Navigation Language)扮演着核心表达式语言的角色,用于在模型、视图和控制器之间传递数据。OGNL是一个强大的表达式语言,允许程序开发者方便地获取和设置对象的属性,以及...

    struts2jar.zip

    5. **表达式语言(EL)和OGNL**:Struts2使用OGNL作为默认的表达式语言,用于在视图层与模型层之间传递数据。 6. **Struts2的生命周期**:包括初始化、请求处理、响应生成等阶段。 7. **Action的注解配置**:...

    Struts1和Struts2区别

    - **Struts2**:默认使用OGNL作为表达式语言,同时也支持JSP EL。OGNL提供了更强大的对象导航和表达式能力。 3. 视图技术: - **Struts1**:主要使用JSP和Tiles作为视图技术,Tiles提供了一种组织和重用页面布局...

Global site tag (gtag.js) - Google Analytics