`
mapengfei00099
  • 浏览: 12975 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

struts valueStack 解析

阅读更多

Struts2OGNL基础上的增强
  1、值栈(ValueStack)
    Struts2OGNL上下文设置为Struts2中的ActionContext(内部使用的仍然是OgnlContext),并将值栈设为OGNL的根对象。
    我们知道,OGNL上下文中的根对象可以直接访问,不需要使用任何特殊的标记,而引用上下文中的其他对象则需要使用“#”来标记。由于值栈是上下文中的根对象,因此可以直接访问。那么对于值栈中的对象该如何访问呢?Struts2提供了一个特殊的OGNLPropertyAccessor,它可以自动查找栈内的所有对象(从栈顶到栈底),直接找到一个具有你所查找的属性的对象。也就是说,对于值栈中的任何对象都可以直接访问,而不需要使用“#”
    假设值栈中有两个对象:studentemployee,两个对象都有name属性,student有学号属性number,而employee有薪水属性salaryemployee先入栈,student后入栈,位于栈顶,那么对于表达式name,访问的就是studentname属性,因为student对象位于栈顶;表达式salary,访问的就是employeesalary属性。正如你所见,访问值栈中的对象属性或方法,无须指明对象,也不用“#”,就好像值栈中的对象都是OGNL上下文中的根对象一样。这就是Struts2OGNL基础上做出的改进。
  2、[N]语法
    如上所述,如果想要访问employeename属性,应该如何写表达式呢?我们可以使用[N].xxx(N是从0开始的整数)这样的语法来指定从哪一个位置开始向下查找对象的属性,表达式[1].name访问的就是employee对象的name属性。
    在使用[N].xxx语法时,要注意位置序号的含义,它并不是表示获取栈中索引为N的对象,而是截取从位置N开始的部分栈。
  3、top关键字
    top用于获取栈顶的对象,结合[N].xxx语法,我们就可以获取栈中任意位置的对象。
    如:[0].top,[1].top
  4、访问静态成员
    除了使用标准的OGNL表达式访问静态字段和静态方法外,Struts2还允许你不指定完整的类名,而是通过“vs”前缀来调用保存在栈中的静态字段和静态方法。
    @vs@FOO_PROPERTY
    @vs@someMethod()
    @vs1@someMethod()
    vs表示ValueStack,如果只有vs,那么将使用栈顶对象的类;如果在vs后面跟上一个数字,那么将使用栈中指定位置处的对象类。
  5、值栈中的Action实例
    Struts2框架总是把Action实例放在栈顶。因为Action在值栈中,而值栈又是OGNL中的根,所以引用Action的属性可以省略“#”标记,这也是为什么我们在结果页面中可以直接访问Action的属性的原因。
  6、Struts2中的命名对象
    Struts2还提供了一些命名对象,这些对象没有保存在值栈中,而是保存在ActionContext中,因此访问这些对象需要使用“#”标记。这些命名对象都是Map类型。
   parameters
    用于访问请求参数。如:#parameters['id']#parameters.id,相当于调用了HttpServletRequest对象的getParameter()方法。
    注意,parameters本质上是一个使用HttpServletRequest对象中的请求参数构造的Map对象,一量对象被创建(在调用Action实例之前就已经创建好了),它和HttpServletRequest对象就没有了任何关系。
   request
    用于访问请求属性。如:#request['user']#request.user,相当于调用了HttpServletRequest对象的getAttribute()方法。
   session
    用于访问session属性。如:#session['user']#session.user,相当于调用了HttpSession对象的getAttribute()方法。
   application
    用于访问application属性。如:#application['user']#application.user,相当于调用了ServletContextgetAttribute()方法。
   attr
    如果PageContext可用,则访问PageContext,否则依次搜索requestsessionapplication对象。

 

 

使用OGNL集合操作符

 

<s:if test="''foo'' in {''foo'',''bar''}">

 

   muhahaha

 

</s:if>

 

<s:else>

 

   boo

 

</s:else>

 

 

 

<s:if test="''foo'' not in {''foo'',''bar''}">

 

   muhahaha

 

</s:if>

 

<s:else>

 

   boo

 

</s:else>

 

除了innot in之外,OGNL还允许使用某个规则获得集合对象的子集,常用的有以下3个相关操作符。

 

? ?:获得所有符合逻辑的元素。

 

? ^:获得符合逻辑的第一个元素。

 

? $:获得符合逻辑的最后一个元素。

 

例如代码:

 

person.relatives.{? #this.gender == ''male''}

 

该代码可以获得person的所有性别为malerelatievs集合。

 

分享到:
评论

相关推荐

    Struts2 Value Stack Contents 中取值、多个集合数组

    Struts2 Value Stack Contents 中取值、多个集合数组示例

    Struts中的ognl和valueStack

    深入讲解Struts中的ognl和valueStack

    Struts2中关于ValueStack的一些操作

    关于ValueStack的描述: 1、 ValueStack其实就是一个放置Java对象的堆栈而已,唯一特别的是可以使用EL来获得值堆栈中对象属性的数据,并可以为值堆栈的对象属性赋值。 2、 EL,全称Express Language,即表达式...

    马士兵Struts2笔记2013

    建立一个Struts2 工程,用Action的属性接收参数,使用Domain Model (实体模型) 接收参数,Struts2_2.1.6版本的中文问题,Struts模块包含,Struts简单数据验证 ,Struts ValueStack(值栈) Debug,Value Stack ...

    Struts用的ognl和valueStack(vs)实例

    Struts用的ognl和valueStack(vs)实例

    struts2的深入理解内核解析

    struts2的深入理解内核解析,当请求url时候,struts容器干了什么,action什么时候被创建,valuestack什么时候被创建

    ValueStack使用参考

    ValueStack的使用方法和一些技能

    xwork-sources

    struts2.0 ValueStack 相关源码

    在线培训:ValueStack

    培训主要学习以下几个知识点: 1、制作PPT,讲解栈的特点和使用方法 2、编码实现回文对 3、制作PPT,讲解Struts2中的ValueStack 4、编码改变ValueStack中的对象的顺序

    Struts2入门教程(全新完整版)

    四、OGNL与ValueStack(VS) 22 1.值栈入门 22 2.OGNL入门 24 3.普通方法访问 24 4.静态方法访问 24 5.默认类Math的访问 24 6.调用普通类的构造方法 25 7.集合对象初步 25 8.集合对象进阶 25 9.N语法top语法 26 10....

    Struts2中的参数传递

    我们知道,Struts2完成参数传递处理工作的基础是OGNL和ValueStack。而在这个 过程中,我也把Struts2所要做的工作大致归纳为两个方面: 1. 对OGNL操作进行封装,完成OGNL表达式所表示的值到Java对象的值传递机制 2. ...

    Struts2 in action中文版

    6.1.2 虚拟对象ValueStack 111 6.2 Struts 2标签概要 113 6.2.1 Struts 2标签API语法 113 6.2.2 使用OGNL设置标签属性 115 6.3 数据标签 117 6.3.1 property标签 117 6.3.2 set标签 118 6.3.3 push标签 119 6.3.4 ...

    struts2 标签库使用文档

    Struts2标签库的组成 ...数据访问标签:主要包含用于输出值栈(ValueStack)中的值,完成国际化等功能的标签。 流程控制标签:主要包含用于实现分支,循环等流程控制的标签。 AJAX标签:用于支持Ajax效果

    struts2 学习例子

    非UI标签可分为流程控制标签(包括用于实现分支、循环等流程控制的标签)和数据访问标签(主要包括用户输出ValueStack中的值,完成国际化等功能的) (3)ajax标签 3.Struts2标签使用前的准备: (1)在要使用标签...

    Struts2练习Demo以及随笔

    Struts的开发步骤、OGNL、ValueStack、Action核心、Result基本原理、Struts2核心标记库、Struts2拦截器、自定义拦截器、UI标记、非UI标记、资源文件国际化等等实例全面使用。

    Struts2基础教程

    讲解Struts2入门基础,包括Action、Result、ValueStack等,Struts2初学者会有帮助

    Struts2框架基础 二

    OGNL表达式 interceptor拦截器 valuestack的存入 /取出

    struts学习笔记(3)

    向页面传值可以使用struts2中特有的两个类的对象 com.opensymphony.xwork2.ActionContext和com.opensymphony.xwork2.util.ValueStack 1)ValueStack和ActionContext的作用: 当客户端向action发送请求并且最后跳转...

    linjin101#javaStudy#Struts2中的OGNL和值栈ValueStack1

    1、什么是值栈 2、值栈的内部结构 3、ActionContext和ValueStatck的关系 4、如何获取值栈对象 5、向值栈存数据 6、从值栈中获取数据

Global site tag (gtag.js) - Google Analytics