Struts2的标签库(二)——OGNL表达式

Struts2的标签库(二)

      ——OGNL表达式

1.Struts2中的OGNL表达式增加了ValueStack的支持。

注:ValueStack——实际上是一个容器对象,该对象在启动Struts2框架时被创建,当前端的JSP页面向Action发送请求时,Struts2框架会将请求的数据封装并存放在栈顶,当请求结束后,此栈顶的数据被清除。Struts2的标签访问数据就是通过访问ValueStack来实现的。

2.Struts2可以直接从对象中获取属性,可以自动搜索Stack Context的所有实例(从上到下),直到找到与求值表达式匹配的属性。

注:Stack Context——一个Map类型的容器,ValueStack是它的根对象。

例如Stack Context中有两个根实例:teacher和student,两个实例都有name属性和say属性,teacher实例中有teach属性,而student中有study属性。teacher实例在栈顶而student在其之后,获取其属性的示例如下:

//这两个属性都是teacher实例和student实例各自特有的属性

//返回teacher的teach属性值(即teacher.getTeach()方法的返回值)

teach

//返回student的study属性值(即student.getStudy()方法的返回值)

study

//当要获取两个实例都有的属性如name或say时

//因为teacher实例位于栈顶所以可以直接获取其属性

//获取teacher实例的name属性(即teacher.getName()方法的返回值)

name

//获取teacher实例的say属性(即teacher.getSay()方法的返回值)

say

//但如果要获取student的name和say属性时,必须要用如下方式

//获取student的name属性(即student.getName()方法的返回值)

#student.name

//获取student的say属性(即student.getSay()方法的返回值)

#student.say

除此之外,也可以通过索引访问Stack Context中的对象:

//访问teacher的name属性

[0].name

//访问teacher的say属性

[0].say

//访问student的name属性

[1].name

//访问student的say属性

[1].say

值得注意的是,使用索引获取元素时并不是从指定索引处直接获取,而是从指定索引处开始向下搜索。

3.Stack Context和ValueStack

  Stack Context中包含ValueStack,ValueStack是Stack Context的根对象;在Stack Context中出了有ValueStack这个根对象以外,还有一些命名对象如parameters、request、session、application、attr对象等。

  访问命名对象时,需要使用"#",访问根对象时可以省略"#"和对象名。

注:在系统创建了Action实例之后,该Action被存放到了ValueStack中,ValueStack是Stack Context的根对象所以不需要用#来访问。

4.几个常用的命名对象

对象 作用 获取方式一 获取方式二
parameters对象 访问HTTP请求参数,返回调用HttpServletRequest实例的getParameter("xxx")方法的返回值。 #parameters[‘xxx‘] #parameters.xxx
request对象 访问HttpServletRequest的属性,返回调用HttpServletRequest实例的getAttribute("xxx")方法的返回值 #request[‘xxx‘] #request.xxx
session对象 访问HttpSession的属性,返回调用HttpSession实例的getAttribute("xxx")方法的返回值 #session[‘xxx‘] #session.xxx
application对象 访问ServletContext的属性,返回ServletContext实例的getAttribute("xxx")方法的返回值 #application[‘xxx‘] #application.xxx

5.操作集合

(1)创建集合

//使用OGNL表达式创建一个List类型的集合

{value1,value2,value3,...}

//使用OGNL表达式创建一个Map类型的集合

{key1:value1,key2:value2,key3:value3,...}

(2)有关集合的运算

in:判断某个元素是否在指定集合中。

not in:判断某个元素是否不在指定集合中。

取得子集的运算:

?——取出所有符合选择逻辑的元素。

^——取出符合逻辑的第一个元素。

$——取出符合逻辑的最后一个元素。

6.访问静态成员(静态方法和静态成员变量)

(1)Struts2默认关闭访问静态方法的功能,只提供访问静态变量的功能,如果要访问静态方法需要在struts.xml中作如下修改:

<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <!-- 设置OGNL表达式可以访问静态方法 -->
    <constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
</struts>

(2)访问静态成员的格式:

访问静态成员变量:@类名@静态变量名

访问静态方法:@类名@静态方法名(参数)

时间: 2024-08-10 01:40:45

Struts2的标签库(二)——OGNL表达式的相关文章

2使用struts2的标签库 EL表达式

与struts1标签库进行比较,struts2的标签库有一个巨大的改进之处就是struts2标签库不依赖于任何表现层技术.就是说struts2的大部分标签可以在jsp页面中使用,也可以在Velocity和FreeMarker等模板技术中使用. Struts2的标签都定义在s标签库中,URI为/struts-tags的空间下.简单的对struts2的标签进行分类: UI标签,用于HTML元素的标签. 非UI标签,主要用于数据访问,逻辑控制等的标签. Ajax标签,用于Ajax支持的标签. 首先将s

2使用struts2的标签库

与struts1标签库进行比较,struts2的标签库有一个巨大的改进之处就是struts2标签库不依赖于任何表现层技术.就是说struts2的大部分标签可以在jsp页面中使用,也可以在Velocity和FreeMarker等模板技术中使用. Struts2的标签都定义在s标签库中,URI为/struts-tags的空间下.简单的对struts2的标签进行分类: UI标签,用于HTML元素的标签. 非UI标签,主要用于数据访问,逻辑控制等的标签. Ajax标签,用于Ajax支持的标签. 首先将s

Struts2的标签库(四)——数据标签

Struts2的标签库(四) --数据标签 1.action标签 该标签用于在jsp页面直接调用一个Action,通过指定executeResult参数,还可以将Action的处理结果包含到此页面中来.此标签的属性如下: var属性:可选属性,一旦定义了该属性,该Action将被放入Stack Context的栈顶. name属性:必选属性,通过该属性指定此标签调用哪个Action. namespace属性:可选属性,通过该属性指定调用Action所在的namespace. executeRes

Struts2的标签库(一)——使用Struts2的标签库

Struts2的标签库(一) --使用Struts2的标签库 1.Struts2的标签库其实就是一个自定义的标签库,所以它也有它的标签处理类和标签库定义文件: 2.和所有自定义标签一样,我们可以找到Struts2的标签库定义文件:struts-tags.tld文件,打开此文件我们可以看到和一个普通的标签库定义文件一样,它也指定了该标签库的默认短名和uri, 其默认短名为"s";其默认uri为"struts-tags". 3.使用Struts2的标签库和使用JSP2中

Struts2的标签库(五)——表单标签

Struts2的标签库(五) --表单标签 几个特殊的表单标签的使用: 1.checkboxlist标签 该标签用于创建多个复选框,用于同时生成多个<input type="checkbox".../>的HTML标签.它根据list属性指定的集合来生成多个复选框.其标签有如下几个属性: list属性:指定要产生复选框的集合: listKey属性:该属性指定集合元素中的某个属性作为复选框的value.当集合为Map时,可以使用Key或者value来指定Map对象中的key或者

JavaWeb框架_Struts2_(五)-----&gt;Struts2的标签库

1. Struts2的标签库 标签库概述 数据标签 流程控制标签 表单标签 非表单标签 2. 具体内容 2.1 Struts2标签库概述 Struts2的标签库可以分为以下3类:用户界面标签.非用户界面标签.AJAX标签; 2.1.1 Struts2标签库的分类和使用 1.  从上图中可以看出,标签的分类如下: (1) 用户界面标签(UI标签) UI标签主要用来生成HTML元素的标签,又分为表单标签和非表单标签.表单标签主要用于生成HTML页面的form元素,以及普通表单元素的标签.非表单元素标

【Struts2五】ValueStack以及ognl表达式二(常用标签)

Ognl常用标签:  1.s:debug 如果把该标签放入到s:iterator中可以看到当前正在迭代的元素的状态   2.s:property 1.输出 2.value属性:值能直接跟ognl表达式 3.如果value属性不写,则默认输出栈顶的元素    3:s:iterator标签 (1).iterator迭代Collection,Map,Object[],还可以以组合的形式迭代 (2).当前正在迭代的元素在栈顶 (3).如果value属性不写,则默认迭代栈顶的元素 (4).如果迭代的是ma

【Struts2五】ValueStack以及ognl表达式二(经常使用标签)

Ognl经常使用标签:  1.s:debug 假设把该标签放入到s:iterator中能够看到当前正在迭代的元素的状态   2.s:property 1.输出 2.value属性:值能直接跟ognl表达式 3.假设value属性不写.则默认输出栈顶的元素    3:s:iterator标签 (1).iterator迭代Collection,Map,Object[],还能够以组合的形式迭代 (2).当前正在迭代的元素在栈顶 (3).假设value属性不写,则默认迭代栈顶的元素 (4).假设迭代的是

第3章 Struts2的标签库

3.1 Struts2的OGNL     1.OGNL表达式基础 标准的OGNL会设定一个根对象(root对象).假设使用标准OGNL表达式来求值(不是Struts 2 OGNL),如果OGNL上下文有两个对象foo对象和bar对象,同时foo对象被设置为根对象(root),则利用下面的OGNL表达式求值. #foo.blah // 返回foo.getBlah() #bar.blah // 返回bar.getBlah() blah // 返回foo.getBlah(),因为foo为根对象 在St