`
高成锋
  • 浏览: 52792 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

struts2学习笔记【十】/ OGNL

阅读更多

OgnlObject-Graph Navigation language】它是一种功能强大的表达式语言(EL),可以存储对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能,它使用相同的表达式去存储对象的属性。

1.1. 应用场景

标签中:<s:property  value="user.name" />

配置文件:<result type="redirect">/ma.jsp?name=${name}/>

1.2. 访问属性和方法

前台调用测试:

名字属性获取:<s:property  value="user.username" />

地址对象中属性获取:

<s:property  value="user.address.doornum" />

调用Action中的静态方法:

<s:property  value="@com.sun.action.LoginAction@get()" />

其中类名必须书写全名,这样才能识别。

调用值栈中对象的普通方法[值栈中默认摆放的都是action对象]

<s:property  value="user.get()" />

调用JDK类的静态方法:

<s:property  value="@java.lang.Math@floor(44.56)" />

上面的写法等同于<s:property  value="@@floor(44.56)" />

Java.lang 类可以省略不写

注意:对于静态方法或静态属性的访问,切不可将属性或是方法设为private

  

调用普通类的静态属性

<s:property  value="@com.sun.Address@doornum" />

注意:在重写构造器的时候,一定要保留一个空构造器

  

调用普通类的构造方法:

<s:property  value="new com.sun.demo.Student('张山',24).name" />

获取action中的一个List集合:[集合中的数据以字符串的格式输出]

<s:property  value="noteList" />

获取集合List中某个元素,可以通过下标索引:

<s:property  value="noteList[2]" />

获取几个Set中的元素:

<s:property  value="noteSet" />

注意:set集合中的元素是无序的且不能存放重复数据,所以不能通过下标索引的方式来获取,只有通过迭代器来获取

获取集合Map中的元素及某个指定元素:

<s:property  value="noteMap" />

<s:property  value="noteMap['note']" />

1.3. 集合的伪属性

OGNL能够引用集合的一些特殊属性,这些属性并不是javabean模式的,例如size(),length(),当表达式引用这些属性的时候,OGNL就会调用相应的方法,这就是伪属性。

Collection

Special properties

Collection

Size,isEmpty

List/Set

Iterator

Map

Key,values

Iterator

Next,hasNext

Enumeration

Next,hasNext,hasElement,hasMoreElements

使用Lambda表达式:

<s:property value="#f=:[#this==1?1:#this*#f(#this-1)],#f(4)" />

访问集合【投影,选择 ?^$】:

<s:property value="noteList" />

投影:

<s:property value="noteList.{title}" />

大括号相当于集合,类比于noteList集合中的所有title属性重新组成找一个列表,noteList中存放多个note对象。

<s:property value="noteList.{title}[0]" />

获取某一个日志的标题。

选择【可以获取各种条件下的结果】:

<s:property value="noteList.{#this.size > 100}" />

表示当前这个对象,该表达式的结果是显示各个对象是否符合条件,boolean

<s:property value="noteList.{?#this.size > 100}" />

?表示取出所有符合条件的对象值

<s:property value="noteList.{?#this.size > 100}.{title}" />

<s:property value="noteList.{?#this.size > 100}.{title}[0]" />

获取第一个结果,不过存在数组下标越界的可能性,所以最好使用如下写法

<s:property value="noteList.{^#this.size > 100}.{title}" />

表示第一个元素

<s:property value="noteList.{$#this.size > 100}.{title}" />

表示最后一个元素

1.4. OGNL#的使用

可以取出堆栈上下文中存放的对象。

parameters

包含当前Http请求参数的Map

#parameters.id[0]相当于request.getParameter("id")

request

包含当前HttpServletRequest的属性的Map

#request.username 相当于request.getAttribute("username");

session

包含当前HttpSession的属性的Map

#session.username 相当于session.getAttribute("username");

application

包含当前ServletContext的属性的Map

#application.username 等同application.getAttribute("username");

attr

用于按作用域由小到大的顺序访问其属性

如:

<result type="redirect">

/test.jsp?username=zhangshan

</result>

页面重定向的时候传递参数,但是需要注意的是如果typedispatcher,那么就不能够在访问的页面中传递参数了,当前这个也是没有必要那么做的。

在前台获取传递的参数的方式如下:

<s:property  value="#parameters.username" />

注意:我们究竟应该使用哪个作用域来取值,希望大家还是能够有能力去区分,这样的话取值能够更加的准确。

1.5. OGNL%的使用

%{}可以取出存在于值栈中的Action对象,直接调用其方法。

例如:你的Action继承了ActionSupport,那么在页面的标签中,用%{getText(’key‘)}的方法可以拿出国际化信息。

1.6. OGNL$的使用

用于在国际化资源文件中,引用OGNL表达式

struts2的配置文件中,引用OGNL表达式

1.7. 值栈【valueStack

值栈同其他几个作用域都存放在内存中,但是valueStack是根对象,不用写 来取值。这个对象贯穿整个Action【每个Action类的对象实例都会拥有一个valueStack】的生命周期,当struts2接受到一个action的请求后,会先去创建一个action对象的实例,但是并不会去调用action的方法,而是先将action类的相应属性放到其值栈对象的顶层节点【valueStack对象相当于一个栈】中。

查看内存中值栈信息:<s:debug></s:debug>

服务器跳转共用一个内存空间,在先后访问多个action时,被访问的action采用栈的存储方式进行压栈操作,访问属性时,从上向下进行查询搜索,有则获取,无则向下访问。

Top语法:

<s:property  value="[1].top.age"  />

取出第一个Action对象,然后取其属性

IN语法:

<s:property  value="[1].age"  />

取出第一个Action对象的某个属性,通常用来取属性

@语法:

调用Action中的静态方法:<s:property value="@vs@get()" /> 栈顶

vs=valueStack,取值栈对象

<s:property value="@vs1@get()" />

<s:property value="@vs2@get()" />

注意:当只有一个action时,vs就是vs1,而当有多个action时,vs1表示第一个action类,vs2就表示第二个action类,以此类推。

<!--EndFragment-->
分享到:
评论

相关推荐

    struts2学习笔记(完美总结)——转自OPEN经验库

    本文将深入探讨Struts2的核心概念,包括Action、Result、配置文件、OGNL与ValueStack、Tags以及项目中的关键实践。 **一、Action** Action是Struts2中处理业务逻辑的核心组件,它是实现了`...

    struts2学习笔记.doc

    ### Struts2学习笔记知识点概览 #### 一、环境搭建 **1.1 Struts2简介** - **Struts2概述**:Struts2是一个开源的MVC框架,它结合了Struts 1.x、WebWork和其他一些框架的优点。Struts2的主要目标是简化Web应用程序...

    struts2学习笔记总结

    本笔记将全面总结Struts2的核心概念、主要功能以及实际开发中的应用。 一、Struts2概述 Struts2是Apache软件基金会下的一个开源项目,它继承了Struts1的优点并解决了其存在的问题,如性能和灵活性。Struts2的核心是...

    struts2 学习重点笔记

    ### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...

    struts2 OGNL语言学习笔记

    Struts2 OGNL语言学习笔记 OGNL(Object-Graph Navigation Language)是 Struts 2 中的一种表达式语言,主要用于简化 JSP 页面中的编码,使页面与后台代码分离。下面是 OGNL 语言的主要特点和用法: 1. 支持对象...

    struts2四天的学习笔记

    13. ** strut2四天笔记**:这份学习笔记可能涵盖了以上所有知识点,包括如何创建Action,配置struts.xml,使用OGNL表达式,处理异常,以及实践中的各种技巧和最佳实践。 在四天的学习过程中,你应该通过实践和理解...

    Struts2学习笔记2012

    ### Struts2学习笔记2012 #### 一、建立一个Struts2工程 **步骤详解:** 1. **创建Web项目:** - 在MyEclipse中选择“File” &gt; “New” &gt; “Dynamic Web Project”,创建一个新的Web项目。 2. **解压并配置...

    Struts2学习笔记

    本学习笔记将深入探讨Struts2的核心概念、架构以及实际应用。 一、Struts2框架概述 1. 架构:Struts2基于Model-View-Controller(MVC)设计模式,将业务逻辑、数据处理和用户界面分离,提高了代码的可读性和可维护...

    OGNL学习笔记,包含struts2中ognl的各种用法

    本篇笔记主要介绍了在Struts2中使用OGNL的一些基本用法。 首先,OGNL可以用来获取不同范围内的属性值。在Java Web开发中,有四种常见的作用域:Request、Session、Application和Page。在示例代码中,`&lt;s:property&gt;`...

    Java相关课程系列笔记之十三Struts2学习笔记

    本笔记将深入探讨Struts2的核心概念、发展历程、使用方法以及与OGNL(Object-Graph Navigation Language)的结合应用。 **一、Struts2概述** 1.1 为什么要用Struts 在Java Web开发中,Struts2作为MVC框架,能够...

    【张冰Struts2学习笔记】0102_第一个Struts2实例

    【张冰Struts2学习笔记】0102_第一个Struts2实例 在Java Web开发领域,Struts2框架是十分重要的MVC(模型-视图-控制器)架构之一,它极大地简化了Web应用程序的开发流程。这篇学习笔记将带你入门Struts2,通过创建...

    Struts1及14. Struts2学习笔记

    本学习笔记将对Struts1和Struts2进行详细解析。 **Struts1简介** Struts1是早期流行的MVC框架,它的核心是ActionServlet,负责处理HTTP请求,并通过ActionForm对象收集表单数据,然后调用Action类的方法进行业务...

    Struts2学习笔记(一) 环境的搭建与HelloWorld程序

    在本篇学习笔记中,我们将聚焦于环境搭建和创建第一个"Hello, World!"程序。 首先,要开始学习Struts2,你需要确保你的开发环境中已经安装了以下基本组件: 1. **Java Development Kit (JDK)**:Struts2依赖于Java...

Global site tag (gtag.js) - Google Analytics