使用 OGNL,您可以引用动作上下文对象,如#application
, #session
, #root
, #action
, #request
, #parameters
,#attr
和动作上下文#context
。
该框架将 OGNL 上下文设置为我们的 ActionContext,并将值堆栈设置为 OGNL 根对象。
OGNL[]
用作索引引用来访问对象属性。例如,如果对象foo
有一个属性bar
,那么它可以访问 likefoo.bar
或foo['bar']
。如果foo
是地图并且bar
是键,它也可以工作。
现在,我想像这样将一个变量和一个值放入值堆栈上下文中
<s:set var="bar" value="'hello'"/>
<s:set var="foo" value="'bar'"/>
并打印值
<s:property value="%{#attr[#foo]}"/>
它应该打印hello
。
我想知道这是如何工作的。我知道这#attr
是一个没有 引用的属性的对象#foo
,即bar
。然而,这有效。如果我使用#request
and#context
并且可能#root
代替. 它也可以工作#attr
。这两个对象都没有属性bar
,但 OGNL 不这么认为。我想知道 OGNL 对它引用的对象的属性有什么看法,以及为什么这个表达式有效。此外,如果有其他方法可以在 OGNL 表达式中hello
使用引用进行打印。#foo