在 Struts 2 中使用 OGNL 访问变量有哪些不同的方法
What are different ways to access variables with OGNL in Struts 2
我现在在一个使用 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 上下文中查找值。查看更多关于 OGNL in Struts docs 的信息。
另一方面,如果变量不在上下文中而是在值堆栈的根中,则第二种方法无法 return 值。
最后一点是Struts解析了它的一些标签属性(几乎所有),比如value
,对于OGNL,%{}
定义了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 上下文中查找值。查看更多关于 OGNL in Struts docs 的信息。
另一方面,如果变量不在上下文中而是在值堆栈的根中,则第二种方法无法 return 值。
最后一点是Struts解析了它的一些标签属性(几乎所有),比如value
,对于OGNL,%{}
定义了OGNL表达的范围。