值栈与ognl

时间:2021-10-07 01:37:26

ValueStack (值栈):

1、贯穿整个Action的生命周期(每个Action类的对象实例都拥有一个ValueStack对象).相当于一个数据的中转站.在其中保存当前Action对象和其他相关对象.
2、Struts2框架把ValueStack对象保存在名为“struts.valueStack”的请求属性中
3、在ValueStack对象的内部有两个逻辑部分:

–ObjectStack: Struts 把Action
和相关对象压入
ObjectStack中

–ContextMap: Struts把各种各样的映射关系(一些Map
类型的对象)压入
ContextMap中. 实际上就是对ActionContext的一个引用

4、Struts2会把下面这些映射加入到ContextMap中

–parameters:该Map
中包含当前请求的请求参数

–request:该
Map 中包含当前 request对象中的所有属性

–session:该
Map 中包含当前 session对象中的所有属性

–application:该Map
中包含当前 application 
对象中的所有属性

–attr:
该 Map 按如下顺序来检索某个属性: request, session, application

值栈与ognl

OGNL表达式

1、在JSP 页面上可以可以利用OGNL(Object-Graph NavigationLanguage:
对象-图导航语言)访问到值栈(ValueStack)里的对象属性

2、若希望访问值栈中 ContextMap中的数据,需要给OGNL表达式加上一个前缀字符#.如果没有前缀字符#,搜索将在
ObjectStack里进行.

3、property标签:Struts2的property
标签用来输出值栈中的一个属性值.

值栈与ognl

4、使用ognl读取ObjectStack里的对象的属性

a、若想访问 Object Stack里的某个对象的属性.
可以使用以下几种形式之一:

object.propertyName

object[ 'prpertyName' ]

object[ " prpertyName " ]

b、ObjectStack里的对象可以通过一个从零开始的下标来引用.

ObjectStack里的栈顶对象可以用[0]
来引用,它下面的那个对象可以用
[1]引用.
若希望返回栈顶对象的message
属性值: [0].message或[0][ “message” ]或[0][‘ message’ ]

c、若在指定的对象里没有找到指定的属性,则到指定对象的下一个对象里继续搜索.即[n]的含义是从第
n 个开始搜索,而不是只搜索第n
个对象

d、若从栈顶对象开始搜索,则可以省略下标部分,即 直接写为 : message

e、结合property标签,可以写为 <s:property value=" [0].message ">  或 <s:property value=" message ">

5、使用ognl读取ContextMap里的对象的属性

a、若想访问ContextMap里的某个对象的属性,可以使用以下几种形式之一:

# object.propertyName

#object[ 'prpertyName' ]

#object[ " prpertyName " ]

b、示例:

            –返回session中的code
属性: #session.code
            –返回request中的customer
属性的 name
属性值: #request.customer.name
            –返回域对象(按request, session, application
的顺序)的lastAccessDate属性: #attr.lastAccessDate

6.  调用字段和方法

     a、可以利用 OGNL
调用
              –任何一个 Java类里的静态字段或方法.
              –被压入到 ValueStack栈的对象上的公共字段和方法.

     b、默认情况下, Struts2
不允许调用任意 Java 类静态方法, 需要重新设置struts.ognl.allowStaticMethodAccess标记变量的值为true,即
 <!-- 打开静态方法的OGNL调用 -->
<constant name="struts.ognl.allowStaticMethodAccess " value="true"/>
     c、调用静态字段或方法需要使用如下所示的语法:
              –@fullyQualifiedClassName@fieldName:   @java.util.Calendar@DECEMBER
              –@fullyQualifiedClassName@methodName(argumentList): @app4.Util@now()
     d、调用一个实例字段或方法的语法,其中
object 是
Object Stack 栈里的某个对象的引用:        

              –.object.fieldName: [0].datePattern
              –.object.methodName(argumentList): [0].repeat(3, “Hello”);

7、访问数组类型的属性

        有些属性将返回一个对象数组而不是单个对象,可以像读取任何其他对象属性那样读取它们.这种数组型属性的各个元素以逗号分隔,并且不带方括号
        可以使用下标访问数组中指定的元素: colors[0]
        可以通过调用其length字段查出给定数组中有多少个元素:colors.length
<!-- 访问数组对象的属性 -->
<%
String[] names=new String[]{"aa","bb","cc","dd"};
request.setAttribute("names", names);
%> length:<s:property value="#attr.names.length"/>
names[2]: <s:property value="#attr.names[2]"/>

8、访问List类型的属性

      •有些属性将返回的类型是java.util.List,可以像读取任何其他属性那样读取它们.这种
List 的各个元素是字符串,
以逗号分隔,并且带方括号
      •可以使用下标访问List中指定的元素: colors[0]
      •可以通过调用其size方法或专用关键字
size 的方法查出给定List
的长度:colors.size或
colors.size()
      •可以通过使用isEmpty()方法或专用关键字
isEmpty来得知给定的List
是不是空.colors.isEmpty或
colors.isEmpty()
       •还可以使用OGNL表达式来创建List,创建一个
List 与声明一个
Java 数组是相同的:{“Red”,“Black”, “Green”}

9、访问Map 类型的属性

       •读取一个Map
类型的属性将以如下所示的格式返回它所有的键值对:
        {key1=value1,key2=value2,key3=value3,........,keyn=valuen}
       •若希望检索出某个Map的值,
需要使用如下格式:map[key]
       •可以使用size
或 size() 得出某个给定的Map
的键值对的个数
       •可以使用isEmpty或isEmpty()
检查某给定 Map
是不是空.
       •可以使用如下语法来创建一个Map:

       #{key1:value1,key2:value2,........,keyn:valuen}

值栈与ognl的更多相关文章

  1. Struts2的值栈和OGNL牛逼啊

    Struts2的值栈和OGNL牛逼啊 一 值栈简介: 值栈是对应每个请求对象的一套内存数据的封装,Struts2会给每个请求创建一个新的值栈,值栈能够线程安全的为每个请求提供公共的数据存取服务. 二 ...

  2. 关于Struts2中的值栈与OGNL表达式

    1.1.1    OGNL概述: Object Graphic Navigation Language(对象图导航语言)的缩写 * EL     :OGNL比EL功能强大很多倍. 它是一个开源项目. ...

  3. (四)值栈与OGNL

    所有的学习我们必须先搭建好Struts2的环境(1.导入对应的jar包,2.web.xml,3.struts.xml) 第一节:值栈简介 值栈是对应每个请求对象的一套内存数据的封装,Struts2 会 ...

  4. 值栈和OGNL 之 7&period;1 值栈

    7.1  值栈 7.1.1  值栈是什么 简单的说:值栈是对应每一个请求对象的轻量级的内存数据中心. Struts2中一个很激动人心的特性就是引入了值栈,在这里统一管理着数据,供Action.Resu ...

  5. Struts2基础学习&lpar;七&rpar;&mdash&semi;值栈和OGNL

    目录: 一.值栈 二.OGNL表达式 一.值栈(ValueStack) 1.定义      ValueStack贯穿整个Acton的生命周期,每个Action类的对象实例都拥有一个ValueStack ...

  6. Struts(九):值栈(OGNL)

    引言 在我们开发过程中,往往会使用一个对像传递到一个具体的action中,之后到跳转页面中访问对应对象的具体的参数. 比如:我们搭建一个struts2项目: 回顾下如何搭建strut2: 1.下载的s ...

  7. 学习Struts--Chap05&colon;值栈和OGNL

    1.值栈的介绍 1.1 值栈的介绍: 值栈是对应每一个请求对象的数据存储中心,struts2会给每一个请求对象创建一个值栈,我们大多数情况下不需要考虑值栈在哪里,里面有什么,只需要去获取自己需要的数据 ...

  8. Struts2知识点小结&lpar;三&rpar;--值栈与ognl表达式

    1.问题一 : 什么是值栈 ValueStack        回顾web阶段 数据交互问题?        客户端提交数据  到  服务器端    request接受数据+BeanUtils实体封装 ...

  9. 走进Struts2(五)— 值栈和OGNL

    值栈 1.值栈是什么? 简单说:就是相应每个请求对象的轻量级的内存数据中心. Struts2引入值栈最大的优点就是:在大多数情况下,用户根本无须关心值栈,无论它在哪里,不用管它里面有什么,仅仅须要去获 ...

随机推荐

  1. C语言编写的简单的电话本管理系统

    #include<stdio.h> #include <string.h> #include<stdlib.h> ; struct person {]; ]; ]; ...

  2. ABAP绘图功能模块概观(转)

    ABAP Graphics FM OverviewABAP绘图功能模块概观 此处仅将功能模块及范例程序列出(若要列出详细参数篇幅过大) 2 Main Graphics Demo Program: GR ...

  3. 布局两列div等高方法

    一.左右布局,左侧div绝对定位,外div相对定位 <!DOCTYPE html> <html lang="en"> <head> <me ...

  4. 史上最简单的个人移动APP开发入门--jQuery Mobile版跨平台APP开发

    书是人类进步的阶梯. ——高尔基 习大大要求新新人类要有中国梦,鼓励大学生们一毕业就创业.那最好的创业途径是什么呢?就是APP.<构建跨平台APP-jQuery Mobile移动应用实战> ...

  5. 通过Linux命令过滤出binlog中完整的SQL语句

    DB:5.6.16CentOS:CentOS release 6.3 (Final) 当insert语句通过空格跨行输入的时候,如何提取完整的insert语句! 创建一个空表:mysql> cr ...

  6. memcached 在windows下安装及启动

    memcached 在windows下安装及启动   Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数, ...

  7. Qt5下的常见问题————C1083

    很多像我一样刚开始学习Qt的时候都会遇到这样的问题.例如"fatal error C1083: 无法打开包括文件:“QApplication”: No such file or direct ...

  8. SSM框架下结合 log4j、slf4j打印日志

    首先加入log4j和slf4j的jar包 <!-- 日志处理 <!-- slf4j日志包--> <dependency> <groupId>org.slf4j ...

  9. 【转】网上看到的&OpenCurlyDoubleQuote;12个非常有用的JavaScript技巧”

    1) 使用!!将变量转换成布尔类型 有时,我们需要检查一些变量是否存在,或者它是否具有有效值,从而将它们的值视为true.对于做这样的检查,你可以使用!!(双重否定运算符),它能自动将任何类型的数据转 ...

  10. SpringBoot集成rabbitmq(一)

    前言 Rabbitmq是一个开源的消息代理软件,是AMQP协议的实现.核心作用就是创建消息队列,异步发送和接收消息.通常用来在高并发中处理削峰填谷.延迟处理.解耦系统之间的强耦合.处理秒杀订单.  入 ...