我正在使用Struts2,当我访问值堆栈变量时,我不知道是否使用%
或#
或$
。我尝试所有这些,直到找到正确的。
谁能解释一下两者之间的区别是什么?
最佳答案
使用#(磅符号)
OGNL用于在ActionContext中引用对象,如下所示:
objectName
:ValueStack中的对象(OGNL上下文中的默认/根对象),例如Action属性#objectName
:已使用Struts2数据标签创建的ActionContext对象,具有默认操作范围(例如#objectName
,由<s:set name="foo" value="'Testing'" />
引用)<s:property value="#foo" />
:请求参数#parameters.objectName
:请求范围的属性#request.objectName
: session 范围的属性#session.objectName
:应用程序范围的属性#application.objectName
:页面,请求, session 或应用程序范围中的属性(按此顺序搜索)可以通过以下两种方式之一使上面的作用域映射引用(参数,请求, session 和应用程序):
#attr.objectName
或#scopeName.objectName
使用%(百分号)
#scopeName['objectName']
用于强制对通常会解释为String文字的属性进行OGNL评估。示例:
%{ OGNL expression }
使用@(符号)
@符号用于引用静态属性和方法。请注意,您可能需要在Struts2属性中启用它:
<s:property value="myProperty" default="%{myDynamicDefaultValue}" />
例子:
@my.package.ClassName@MY_STATIC_PROPERTY
@my.package.ClassName@myStaticMethod
使用$(美元符号)
Struts2 OGNL没有特别使用美元符号。但是,它可以用于评估正常的JSTL表达式。例如:
Struts2:
struts.ognl.allowStaticMethodAccess=true
(相当于...)JSTL:
<h1><s:property value="#pageTitle" /></h1>
关于jsp - Struts标记中的#,%和$号有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8007858/