我正在使用Struts2,当我访问值堆栈变量时,我不知道是否使用%or #或or $。我尝试所有这些,直到找到正确的。
%
#
$
谁能解释一下两者之间的区别是什么?
使用#(井号)
OGNL用于在ActionContext中引用对象,如下所示:
objectName
#objectName
<s:set name="foo" value="'Testing'" />
<s:property value="#foo" />
#parameters.objectName
#request.objectName
#session.objectName
#application.objectName
#attr.objectName
可以通过以下两种方式之一使上面的作用域映射引用(参数,请求,会话和应用程序):
#scopeName.objectName
#scopeName['objectName']
使用%(百分号)
%{ OGNL expression } 用于强制对通常会解释为String文字的属性进行OGNL评估。
%{ OGNL expression }
例: <s:property value="myProperty" default="%{myDynamicDefaultValue}" />
<s:property value="myProperty" default="%{myDynamicDefaultValue}" />
@的使用(在符号处)
@符号用于引用静态属性和方法。请注意,您可能需要在Struts2属性中启用它:struts.ognl.allowStaticMethodAccess=true
struts.ognl.allowStaticMethodAccess=true
例子:
@my.package.ClassName@MY_STATIC_PROPERTY @my.package.ClassName@myStaticMethod
$的使用(美元符号)
Struts2 OGNL没有特别使用美元符号。但是,它可以用于评估正常的JSTL表达式。例如:
Struts2 :(<h1><s:property value="#pageTitle" /></h1> 相当于…) JSTL:<h1>${pageTitle}</h1>
<h1><s:property value="#pageTitle" /></h1>
<h1>${pageTitle}</h1>