文档库 最新最全的文档下载
当前位置:文档库 › 02struts2值栈与标签

02struts2值栈与标签

Softeem Consultancy Service
Struts2值栈与标签 值栈与标签
主讲: 主讲:周玮

Softeem Consultancy Service
课堂目标
? 值栈与 OGNL ? 普通标签 普通标签(Generic Tags) ? 用户界面标签(UI Tags) 用户界面标签 ? 实用例子
2010-3-31
2

Softeem Consultancy Service
值栈(ValueStack) 值栈
? 值栈的含义正如它的名字所表示的那样 值栈的含义正如它的名字所表示的那样——对象所组成的栈。 对象所组成的栈。 对象所组成的栈 ? 值栈中的对象构成及其排列顺序如下所示: 值栈中的对象构成及其排列顺序如下所示: ? 1. 临时对象——在执行过程中,临时对象被创建出来并放到了值 在执行过程中, 临时对象 在执行过程中 栈中。举个例子来说, 标签所遍历的对象容器中, 栈中。举个例子来说,像 JSP标签所遍历的对象容器中,当前访 标签所遍历的对象容器中 问到的值就是临时对象 ? 2. 模型对象 模型对象——如果模型对象正在使用,那么会放在值栈中 如果模型对象正在使用, 如果模型对象正在使用 action的上面 的上面 ? 3. Action对象 对象——正在被执行的 action 对象 正在被执行的 ? 和值栈同一级的固定名称的对象(Named Objects)——这些对 和值栈同一级的固定名称的对象( 固定名称的对象 ) 这些对 象包括有 #application, #session, #request, #attr 和 , , , #parameters,以及相应的 servlet作用域 , 作用域 ? 访问值栈可以有很多方法,其中最常用的一种就是使用 JSP提供 访问值栈可以有很多方法, 提供 的标签或OGNL. 的标签或
2010-3-31 3

Softeem Consultancy Service
值栈(ValueStack) 值栈
? struts2对OGNL上下文的概念又做了进一步扩充,在struts2中, 。 对 中 来处理OGNL表达式 。 表达式。 在Struts2中,采用标准命名的上下文 中 上下文的概念又做了进一步扩充 来处理 表达式 采用标准命名的上下文(Context)来处理 来处理OGNL表达式 表达式。 在Struts2中,采用标准命名的上下文(Context)来处理 中 上下文的概念又做了进一步扩充, 采用标准命名的上下文 来处理 表达式 处理OGNL的顶级对象是一个 的顶级对象是一个Map(也叫 ),而 处理 的顶级对象是一个 ( 也叫 ), OGNL上下文通常如下所示: 上下文通常如下所示: 上下文通常如下所示 处理OGNL的顶级对象是一个 的顶级对象是一个Map(也叫context map),而OGNL ),而 处理 的顶级对象是一个 (也叫context map),而OGNL ), 在这个context中就是一个顶级对象 中就是一个顶级对象(root)。在用法上,顶级对象的属 在这个 中就是一个顶级对象 。 在用法上, 在这个context中就是一个顶级对象 中就是一个顶级对象(root)。在用法上, 顶级对象的属 在这个 中就是一个顶级对象 。在用法上, ? |--request 性访问,是不需要任何标记前缀的。而其它非顶级的对象访问, 需要 性访问,是不需要任何标记前缀的。而其它非顶级的对象访问,需要 性访问,是不需要任何标记前缀的。而其它非顶级的对象访问, 性访问,是不需要任何标记前缀的。而其它非顶级的对象访问, ? 使用#标记 使用 标记 | 使用#标记 使用 标记 ? |--application ? | ? context map |--OgnlValueStack(root) [ user, action, OgnlUtil, ... ] ? | Action也是根节点 Action也是根节点 ? 也是根节点 |--session 也是根节点 ? | ? |--attr ? | ? |--parameters
2010-3-31 4

Softeem Consultancy Service
OGNL
? OGNL的全称是 Object Graph Navigational Language 的全称是 对象图导航语言),提供了访问值栈中对象的统一方式。 ),提供了访问值栈中对象的统一方式 (对象图导航语言),提供了访问值栈中对象的统一方式。 ? OGNL有如下特点 有如下特点 有如下特点: ? (1)、支持对象方法调用,形式如: 、支持对象方法调用,形式如: objName.methodName(); ; (2)、支持类静态的方法调用和值访问,表达式的格式为 、支持类静态的方法调用和值访问, @[类全名(包括包路径)]@[方法名 | 值名],例如: 类全名(包括包路径) 方法名 值名 ,例如: 类全名 @https://www.wendangku.net/doc/da18865218.html,ng.String@format('foo %s', 'bar')或 或 @https://www.wendangku.net/doc/da18865218.html,ng.Math@PI; ; (3)、支持赋值操作和表达式串联,如price=100, 、支持赋值操作和表达式串联, discount=0.8, calculatePrice(),这个表达式会返回 ; ,这个表达式会返回80; (4)、访问 上下文( 、访问OGNL上下文(OGNL context)和 上下文 ) ActionContext; ; (5)、操作集合对象。in;not in. 、操作集合对象。
2010-3-31 5

Softeem Consultancy Service
OGNL--#,%,$
? ? ? ? ? ? ? ? #: 访问非根对象 访问非根对象(struts中值栈为根对象 中值栈为根对象). 中值栈为根对象 #parameters.id[0]作用相当于 作用相当于request.getParameter("id") 作用相当于 #https://www.wendangku.net/doc/da18865218.html,erName相当于 相当于request.getAttribute("userName") 相当于 #https://www.wendangku.net/doc/da18865218.html,erName相当于 相当于session.getAttribute("userName") 相当于 #https://www.wendangku.net/doc/da18865218.html,erName相当于 相当于 application.getAttribute("userName") #https://www.wendangku.net/doc/da18865218.html,erName相当于按顺序在以上三个范围(scope)内读取 相当于按顺序在以上三个范围( 相当于按顺序在以上三个范围 ) userName属性,直到找到为止 属性, 属性 根对象中的元素直接访问,不需要特殊的符号 注:根对象中的元素直接访问 不需要特殊的符号 根对象中的元素直接访问 %{} : 是在标签的属性值被理解为字符串类型时,告诉执行环境 是在标签的属性值被理解为字符串类型时, %{}里的是 里的是OGNL表达式。实际上就是让被理解为字符串的表达 表达式。 里的是 表达式 被真正当成ognl来执行。 来执行。 式,被真正当成 来执行 ${}: (1)、在国际化资源文件中,引用 、在国际化资源文件中,引用OGNL表达式 表达式 (2)、在Struts 2配置文件中,引用 配置文件中, 、 配置文件中 引用OGNL表达式 表达式
6
? ?
2010-3-31

Softeem Consultancy Service
Struts2标签库分类 标签库分类
Struts2标签库 标签库
用户界面标签库
普通标签库
表单标签库
非表单标签库
Ajax支持标签库 支持标签库
控制标签库
数据访问标签库
2010-3-31
7

Softeem Consultancy Service
Struts2常用标签 常用标签
? ? ? <%@ taglib prefix="s" uri="/struts-tags" %> 可以从功能上将其分为两大类: 可以从功能上将其分为两大类: 普通标签(Generic Tags) 普通标签
– – – – 控制标签(Control) 控制标签 if, elseif, else, iterator... 数据标签(Data) 数据标签 property, set, text, a, url...
? 用户界面标签 用户界面标签(UI Tags)
– Form Tags , Non-Form UI Tags , Ajax Tags – form, textfield, textarea, password, hidden, select, checkboxlist, checkbox, radio, file, submit, reset, token... ? 参考 struts-2.1.8\docs\docs\tag-reference.html 参考:
2010-3-31 8

Softeem Consultancy Service
Struts2的数据标签 的数据标签
? 数据标签,提供各种各样的数据访问相关功能 数据标签, ? 数据标签包含如下几个
– property:用于生成输出某个值,包括输出ValueStack、 :用于生成输出某个值,包括输出 、 StackContext和Action Context中的值 和 中的值 – set:设置一个新变量,将新变量放入指定范围内 :设置一个新变量, – text:输出国际化消息 : – url:生成一个 地址 :生成一个url地址 – a: 生成 生成HTML标签 标签 标签 – push:将某个值放入 :将某个值放入ValueStack的栈顶 的栈顶 – action:使用 页面直接调用 页面直接调用action :使用jsp页面直接调用 – bean:创建一个 :创建一个javaBean实例 实例 – date:格式化输出日期 : – debug:在页面上生成一个调试链接 : – i18n:指定国际化资源文件的 :指定国际化资源文件的baseName – include:jsp页面中包含其他的 或Servlet容器 页面中包含其他的jsp或 : 页面中包含其他的 容器
2010-3-31 9

Softeem Consultancy Service
标签property 标签
? property :得到 得到'value'的属性 如果 的属性,如果 没提供,默认为 得到 的属性 如果value没提供 默认为 没提供 堆栈顶端的元素。 堆栈顶端的元素。
必 默认 需
名称
类型 String Object
描述 如果属性是null则显示的 如果属性是 则显示的default值 值 则显示的 要显示的值
default 否 value 否 栈顶
escape 否 true Booelean 是否 是否escape HTML
2010-3-31
10

Softeem Consultancy Service
OGNLtest.jsp
? ?
? ---
? --
? http://127.0.0.1:8080/JavaSSH/OGNLtest.jsp?name =jack ? http://127.0.0.1:8080/JavaSSH/OGNLtest.jsp?name =jack
2010-3-31 11

Softeem Consultancy Service
标签set 标签
? set:标签赋予变量一个特定范围内的值。当希望给一个变量赋一个 标签赋予变量一个特定范围内的值。 标签赋予变量一个特定范围内的值 复杂的表达式,每次访问该变量而不是复杂的表达式时用到 每次访问该变量而不是复杂的表达式时用到。 复杂的表达式 每次访问该变量而不是复杂的表达式时用到。其在 两种情况下非常有用: 性能提升) 两种情况下非常有用 复杂的表达式很耗时 (性能提升 或者很难理 性能提升 代码可读性提高)。 解 (代码可读性提高 。 代码可读性提高
名称 var scope value 必 默认 需 否 否 action 否 类型 String String String 描述 变量名字 变量作用域,可以为 变量作用域 可以为application, 可以为 session, request, page, 或action. 将会赋给变量的值
2010-3-31
12

Softeem Consultancy Service
标签text 标签
? text:支持国际化信息的标签。国际化信息必须放在一个和当前 支持国际化信息的标签。 支持国际化信息的标签 action同名的 同名的resource bundle中,如果没有找到相应 如果没有找到相应message,标 同名的 中 如果没有找到相应 标 签中内容将被当作默认message,如果没有标签内容 如果没有标签内容,message的 签中内容将被当作默认 如果没有标签内容 的 name会被作为默认 会被作为默认message。 会被作为默认 。
名称
必 默 类型 需 认 String String
描述
name 是 var 否
资源属性的名字
植栈中的变量名
2010-3-31
13

Softeem Consultancy Service
OGNLtest.jsp
? ? ------
? http://127.0.0.1:8080/JavaSSH/OGNLtest.jsp?nam e=jack
2010-3-31
14

Softeem Consultancy Service
标签url 标签
? url标签,用于生成一个URL地址,可以通过为 标签 标签,用于生成一个 地址, 标签 地址 可以通过为url标签 指定param元素 指定 元素 ? url标签属性 标签属性
value:可选属性,指定生成URL的地址值 :可选属性,指定生成 的地址值 scheme:可选属性,用于设置 :可选属性,用于设置scheme属性 属性 namespace:可选属性,该属性指定命名空间 :可选属性, action:可选属性,指定生成 的地址为哪个Action :可选属性,指定生成URL的地址为哪个 的地址为哪个 method:可选属性,指定使用 :可选属性,指定使用Action的方法 的方法 encode:可选属性,指定是否需要 :可选属性,指定是否需要encode参数 参数 includeContext:可选属性,指定是否需要将当前上下文包含 :可选属性, 地址中。 在URL地址中。 地址中 – includeParams:可选属性,指定是否包含请求参数 :可选属性, – anchor:可选属性,指定 :可选属性,指定URL的锚点 的锚点 – id:可选属性,指定该 元素的引用 元素的引用ID :可选属性,指定该url元素的引用 – – – – – – –
2010-3-31 15

Softeem Consultancy Service
OGNLtest.jsp
? ? ? ? ? ? ? ? a1 a2
2010-3-31
16

Softeem Consultancy Service
Struts2的控制标签 的控制标签
? ? ? ? ? ? ? ? ? ?
2010-3-31
9个控制标签 个控制标签 if:用于控制选择输出的标签 : elseif:与if标签结合使用,用于控制选择输出的标签 与 标签结合使用, 标签结合使用 else:与if标签相结合使用,控制选择输出的标签 标签相结合使用, : 标签相结合使用 iterator:将集合迭代输出 : generator:一个字符串解析器,将字符串解析成集合 一个字符串解析器, 一个字符串解析器 append:用于将多个结合拼接成一个新的集合 : merge:将多个集合拼接成一个新的集合 : sort:对集合进行排序 : subset:截取集合部分元素,形成新的子集合 :截取集合部分元素,
17

Softeem Consultancy Service
标签if、elseif和else 标签
? if、elseif和else ? 执行基本的条件流转。 执行基本的条件流转。
名称 test 必 默 需 认 是 类型 Boolean 描述 决定标志里内容是否显示 的表达式 备注 else标志没有 标志没有 这个参数
2010-3-31
18

Softeem Consultancy Service
OGNLtest.jsp
? ok ? ook ? fail ? <%-- 或用 或用in ; not in --%> ? ok ? ok ?
? http://127.0.0.1:8080/JavaSSH/OGNLtest.jsp?name=jack
2010-3-31
19

Softeem Consultancy Service
标签iterator 标签
? iterator用于遍历集合(java.util.Collection)或枚举值 用于遍历集合( 用于遍历集合 ) (java.util.Iterator)。 )。
名称
必 默认 需
类型 String String String
描述 如果设置此参数,一个 如果设置此参数,一个IteratorStatus的 的 实例将会压入每个遍历的堆栈 要遍历的可枚举的( 要遍历的可枚举的(iteratable)数据 ) 或者将放入新列表( 源,或者将放入新列表(List)的对象 ) 放入植栈中的变量名
status 否 value var 否 否
2010-3-31
20

相关文档
相关文档 最新文档