zoukankan      html  css  js  c++  java
  • OGNL和ValueStack

    OGNL简介

    OGNL的全称是Object Graph Navigation Language,即对象导航图语言。它是一个开源项目,工作在视图层,其通过简单一致的表达式语言来读取合适者Java对象的属性值,调用对象的方法,遍历整个对象的结构图,实现字段类型的转换。

    OGNL简介

    OGNL的计算都是围绕着OGNL上下文来进行的,OGNL上下文实际就是一个Map集合,由ognl.OgnlContext类来表示(其被封装到ActionContext中)。其可以包含一个或多个上下文对象。

    先面以一个例子来介绍OGNL表达式的使用

    普通Action类代码:

    image

    省略action配置信息。。。

    视图页面代码:

    image

    通过上面的例子我们发现在Action类中我们使用了两种方式向ValueStack中赋值,且在视图页面进行读取时的语法也不一样,只是为什么呢?这就要说到ValueStack了。

    ValueStack

    ValueStack也就是值栈,简单的来说,值栈就是框架创建的一个存储区域,用来保存Model对象。它具有栈的特性,可以存放多个对象。

    在视图页面中我们也可以使用<s:debug></s:debug>标签来查看值栈中的信息,如图所示:

    image

    从上图中我们可以看出页面显示的ValueStack中大致划分了Value Stack Contents和 Stack Context两块儿区域,其中Value Stack Contents是Root对象其以ArrayList的形式存放数据。OGNL表达式语言可以直接通过Property Name名称来获取其对应的值。而Stack Context中的数据则存放在Context中其是以map集合的形式来存放数据的。在是用OGNL表达式来访问时需要加上“#”作为前缀。

    ActionContext中还有其他的对象这里就不在进行一一讲述,他们可以使用OGNL表达式语言来进行操作。但是除了Root对象中的值以外访问其他的值是都需要加上“#”作为前缀!

     

  • 相关阅读:
    Post提交和Get提交的区别
    Servlet 生命周期
    MVC
    HDU 5033 Building (维护单调栈)
    2014 ACM/ICPC Asia Regional Xi'an Online(HDU 5007 ~ HDU 5017)
    HDU 1026 Ignatius and the Princess I (BFS)
    URAL 1183 Brackets Sequence(DP)
    POJ 3384 Feng Shui(半平面交向内推进求最远点对)
    POJ 3525 Most Distant Point from the Sea (半平面交向内推进+二分半径)
    POJ 1279 Art Gallery(半平面交求多边形核的面积)
  • 原文地址:https://www.cnblogs.com/wangzheand/p/5858664.html
Copyright © 2011-2022 走看看