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对象中的值以外访问其他的值是都需要加上“#”作为前缀!

     

  • 相关阅读:
    codeforces C. No to Palindromes!
    codeforces D. Pashmak and Parmida's problem
    codeforces C. Little Pony and Expected Maximum
    codeforces D. Count Good Substrings
    codeforces C. Jzzhu and Chocolate
    codeforces C. DZY Loves Sequences
    codeforces D. Multiplication Table
    codeforces C. Painting Fence
    hdu 5067 Harry And Dig Machine
    POJ 1159 Palindrome
  • 原文地址:https://www.cnblogs.com/wangzheand/p/5858664.html
Copyright © 2011-2022 走看看