Struts2学习第三天(OGNL-ValueStack-标签库)

OGNL

首先了解下OGNL的概念:OGNL是Object-Graph NavigationLanguage的缩写,全称为对象图导航语言,是一种功能强大的表达式语言,它通过简单一致的语法,可以任意存取对象的属性或者调用对象的方法,能够遍历整个对象的结构图,实现对象属性类型的转换等功能。

OGNL中重要的3个符号:#、%、$:
#:

  • 用来访问值栈中的Context区域.
  • 用来构造Map(在struts的标签库使用,如:checkbox,radio,select标签),eg:
    #{‘key1’:‘value1’, ‘key2’:‘value2’}。

%:

  • 用途是在标志的属性为字符串类型时,计算OGNL表达式的值,这个类似js中的eval,很暴力。

$:

  • 在xml文件中获取Action类中字段的值(提供getter方法)

ValueStack

值栈是对应每一个请求对象的轻量级的内存数据中心。
每一次请求的时候,都会创建一个新的ValueStack对象(Action也是新的),该ValueStack对象封装了这一次请求相关的数据信息.
1).ValueStack实际是一个接口,在Struts2中利用OGNL时,实际上使用的是实现了该接口的OgnlValueStack类,这个类是Struts2利用OGNL的基础。
2).ValueStack贯穿整个Action的生命周期(一次请求):每个Action类的实例都拥有一个ValueStack对象。
ValueStack相当于数据的中转站,在其中保存该次请求和当前Action对象和其他相关对象信息。
3).Struts2框架把ValueStack对象保存在名为“struts.valueStack”的request属性中(意味着可用ActionContext对象去获取)。

  • ValueStack内部结构(可通过标签<s:debug/>在网页中查看):
    root: 类型: CompoundRoot extends ArrayList : 表示栈的数据结构(后进先出)
    context: 类型: Map: : 上下文
    如图:
  • 获取ValueStack对象的三种方式:
  • 在root区域存放数据:

在这里插入图片描述
在jsp取数据:

 若:放入root中的数据,没有属性名:<s:property value="[0].top"/>
 若:放入root中的数据有属性名:   <s:property value="属性名"/>
 如:
<!-- 方式一,二: -->
<s:property value="[0].top"/>
<!-- 方式三,四: -->
<s:property value="[hello1"/>
<s:property value="hello2"/>

注意:key同名会覆盖value,建议使用方式3和4时,不要使用方式1和2因为不能保证数据在栈顶.!!!同时也推荐使用方式3和4比较方便

  • 在Context区域存放数据:

  • 在jsp取数据:
<%@ taglib uri="/struts-tags"  prefix="s"%>
<s:property value="#hello1"/><br/>
<s:property value="#hello2"/><br/>
<s:property value="#session.USER_IN_SESSION"/>
<s:property value="#application.username"/>
<hr/>
<!--EL可以访问ValueStack中的数据,但不推荐-->
${requestScope.hello1}<br/>
${hello2}<br/>
${sessionScope.USER_IN_SESSION}
${applicationScope.username}

Struts2的标签库:

标签库详细演示可参考此博客:https://blog.youkuaiyun.com/yaerfeng/article/details/51279409
(或在struts2的官方文档中查看)

  • 通用标签
  • 表单标签
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值