在Struts 2中使用OGNL访问变量有哪些不同的方法

时间:2015-09-12 20:21:59

标签: jsp struts2 ognl valuestack

我现在正在使用OGNL的Struts2项目中工作。我看到了使用OGNL在JSP中访问数据的三种不同方法。

value1 ="previousList"
value2 = "#previousList"
value3 = "%{previousList}"

这些将会有什么作用,还有其他方法可以从OGNL访问数据吗?

1 个答案:

答案 0 :(得分:1)

作为ValueStack实现的值堆栈有两个方法pushset。第一种方法变量推送到堆栈,但第二种设置为值堆栈的上下文。如果值栈的上下文中的变量,您可以使用不同的方式来访问它。 Struts有一个功能,如果它无法在值栈中找到一个变量来搜索值栈的上下文。

<s:property value="previousList"/>
<s:property value="#previousList"/>
<s:property value="%{previousList}"/>

因此,所有这些都打印了值,但第二种情况更快一些,因为它使用#指出OGNL直接在OGNL上下文中查找值。详细了解OGNL in Struts docs

另一方面,如果变量不在上下文中但在值栈的根中,则第二种方法无法返回该值。

最后一点是,Struts为OGNL解析了一些标记属性(几乎所有),如value%{}定义了OGNL表达式的范围。