我现在在一个使用 OGNL 的 Struts2 项目中工作。我看到了三种使用 OGNL 在 JSP 中访问数据的不同方法。
value1 ="previousList"
value2 = "#previousList"
value3 = "%{previousList}"
这些将做什么?还有其他方法可以从 OGNL 访问数据吗?
我现在在一个使用 OGNL 的 Struts2 项目中工作。我看到了三种使用 OGNL 在 JSP 中访问数据的不同方法。
value1 ="previousList"
value2 = "#previousList"
value3 = "%{previousList}"
这些将做什么?还有其他方法可以从 OGNL 访问数据吗?
作为 的实现的值堆栈ValueStack
有两个方法push
和set
. 第一种方法将变量压入堆栈,但第二种方法设置到值堆栈的上下文中。如果变量在值栈的上下文中,你可以使用不同的方式来访问它。Struts 有一个特性,如果它在值堆栈中找不到变量,它会搜索值堆栈的上下文。
<s:property value="previousList"/>
<s:property value="#previousList"/>
<s:property value="%{previousList}"/>
因此,它们都打印了值,但第二种情况要快一些,因为它指出 OGNL 使用#
直接在 OGNL 上下文中查找值。在 Struts 文档中查看更多关于OGNL 的信息。
另一方面,如果变量不在上下文中但在值堆栈的根中,则第二种方法无法返回值。
最后一点是,Struts 会解析它的一些标记属性(几乎所有),例如value
OGNL,并%{}
定义 OGNL 表达式的范围。