Struts2使用标准的Context来进行OGNL表达式语言求值,OGNL的*对象是一个Context,这个Context对象就是一个Map类型实例,其根对象就是
ValueStack,如果需要访问ValueStack里的属性,直接通过如下方式即可:
//取得ValueStack中bar属性
${bar}
除此之外,Struts2还提供了一些命名对象,但是这些命名对象都不是Stack Context的跟对象,它们只是存在于StackValue中。所以访问这些对象时需要使用“#”前缀来指明。
parameters对象:用于访问HTTP请求参数。例如#parameters['foo']或#parameters.foo,用于返回调用HttpServletRequest的getParameters("foo")方法的返回值。
request对象:用于访问HttpServletRequest的属性。例如#request['foo']或#request.foo,用于返回调用HttpServletRequest的getAttribute("foo")方法的返回值。
session对象:用于访问HttpSession的属性。例如#session['foo']或#session.foo,用于返回调用HttpSession的getAttribute("foo")方法的返回值。
application对象:用于访问ServletContext的属性。例如#application['foo']或#application.foo,用于返回调用ServletContext的getAttribute("foo")方法的返回值。
att对象:该对象将依次搜素如下对象:PageContext,HttpServletRequest,HttpSession,ServletContext中的属性。
总结:
OGNL的Stack Context是整个OGNL计算,求值的Context,而ValueStack只是StackContext内的“根”对象而已。OGNL的Stack Context里除了ValueStack这个根对象外,还包括parameters,request,session,application,attr等命名对象,但这些命名对象都不是根对象。Stack Context中的“根”对象和其他普通对象的区别在于:
访问Stack Context里的普通命名对象需要在对象前加前缀“#”
当访问OGNL的Stack Context里的“根”对象的属性时,可以省略对象名
相关文章
- 10-06lambda表达式和groovy闭包的区别
- 10-06spring注解@Scheduled中fixedDelay、fixedRate和cron表达式的区别
- 10-06C语言中的%f和%lf的格式符的区别
- 10-06【JS】利用函数里才有的arguments对象和正则表达式来模拟C语言中的printf
- 10-06Lamda 表达式里的Join和GroupJoin的区别, 如何实现SQL的Left Join效果
- 10-06Rust中语句和表达式的区别
- 10-06OGNL表达式语言中的"#"和"$"的区别
- 10-06c语言中数组的定义和java中数组定义的一些区别
- 10-06js函数表达式和函数声明的区别
- 10-06[转]javascript函数定义表达式和函数声明的区别