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)、支持对象方法调用,形式如: 、支持对象方法调用,形式如: hodName(); ; (2)、支持类静态的方法调用和值访问,表达式的格式为 、支持类静态的方法调用和值访问, @[类全名(包括包路径)]@[方法名 | 值名],例如: 类全名(包括包路径) 方法名 值名 ,例如: 类全名 @java.lang.String@format('foo %s', 'bar')或 或 @java.lang.Math@PI; ; (3)、支持赋值操作和表达式串联,如price=100, 、支持赋值操作和表达式串联, discount=0.8, calculatePrice(),这个表达式会返回 ; ,这个表达式会返回80; (4)、访问 上下文( 、访问OGNL上下文(OGNL context)和 上下文 ) ActionContext; ; (5)、操作集合对象。in;not in. 、操作集合对象。
2010-3-31 5

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。