Struts2基础(3)

Struts2值栈
1. OGNL概述
1. 是一种表达式,特点:
(1)支持对象方法调用:objName.methodName()
(2)支持静态方法调用和值访问:@[类全名]@[方法名|值名]
(3)支持赋值操作和表达式串联
(4)访问OGNL上下文(OGNL Context)和ActionContext
(5)操作集合对象
2. 在Struts2中主要用来操作值栈数据,和Struts2的标签一起使用操作值栈
3. OGNL是单独的项目,不是Struts2的一部分,使用时首先需要导入Jar包

2. OGNL入门
使用Struts2标签,需要引入Struts2标签库
<%@ taglib uri="/struts-tags" prefix="s"%>
<s:property value="OGNL表达式">

3.值栈
1. Struts2中本身提供了一个存储机制,类似于域对象,就是值栈
(1)在Action中把数据存放到值栈中,在页面中可以获取值栈数据
2. Servlet和Action的区别
(1)Servlet:
默认在第一次访问时创建,只创建一次,单实例对象
(2)Action:
访问时候创建,每次访问Action时都会创建Action对象,创建多次,多实例对象
3. 存储位置
(1)每次访问Action时都会创建Action对象
(2)在每个Action的对象中都会有一个值栈对象
4. 获取值栈对象
使用ActionContext类中的方法获得值栈对象
ActionContext context = ActionContext.getContext();
context.getValueStack();
每个Action对象中只有一个值栈对象
5. 值栈内部结构
值栈分为两部分:
(1)root,结构是List集合,一般都是操作root里面的数据
(2)context,结构是Map集合


6. 向值栈中放数据
(1)三种方式
(a)获取值栈对象,调用值栈对象里面的set方法
(b)获取值栈对象,调用值栈对象里的push方法
(c)在Action中定义变量,生成变量的get方法(√)
节省空间
(2)向值栈放字符串
(3)向值栈放对象
(a)定义对象变量
(b)生成对象的get方法
(c)在执行方法设置值
(4)向值栈放List集合
(a)定义List集合变量
(b)生成List集合的get方法
(c)在执行方法设置值
7. 从值栈中取数据
使用Struts2标签和OGNL表达式获取值栈数据
(1)从值栈中获取字符串
<s:property value="OGNL表达式">
(2)从值栈获取对象
<s:property value="user.username">
(3)从值栈获取List集合
(a)<s:property value="list[0].username">
(b)<s:iterator value="list">
<s:property value="username">
</s:iterator>
(c)<s:iterator value="list" var="user">
<s:property value="#user.username">
</s:iterator>
8. 使用set方法向值栈中放数据,获取
<s:property value="username">
9. 使用push方法向值栈中放数据,获取
根据数据获取值
<s:property value="[0].top">

8. EL表达式获取值栈数据
为什么?
(1)EL表达式获取域对象的值
(2)向域对象里放值使用setAttribute方法,获取值使用getAttributte方法
(3)底层增强request对象里的getAttribute方法
(a)首先从request域中获取值,如果获取到,直接返回
(b)如果从request域中获取不到值,到值栈中把值获取出来,把值放到域对象里
4. OGNL的#和%的使用
1. #使用
获取Context中的数据,写OGNL时,需要首先添加#
2. %使用
在Struts2的表单标签中
(1)在Struts2标签里使用OGNL表达式,如果直接在Struts2表单标签使用OGNL表达式不识别,之后%后才会识别
<s:textfield name="username" value={%{#request.req}}>

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值