一尘不染

Struts标记中的#,%和$号有什么区别?

jsp

我正在使用Struts2,当我访问值堆栈变量时,我不知道是否使用%or #或or $。我尝试所有这些,直到找到正确的。

谁能解释一下两者之间的区别是什么?


阅读 221

收藏
2020-06-08

共1个答案

一尘不染

使用#(井号)

OGNL用于在ActionContext中引用对象,如下所示:

  • objectName:ValueStack中的对象(OGNL上下文中的默认/根对象),例如Action属性
  • #objectName:对象在ActionContext中,但在ValueStack之外,特别是…
    • #objectName:已使用Struts2数据标签以及默认操作范围(例如,<s:set name="foo" value="'Testing'" />通过引用的<s:property value="#foo" />)创建的ActionContext对象
    • #parameters.objectName:请求参数
    • #request.objectName:请求范围的属性
    • #session.objectName:会话范围的属性
    • #application.objectName:应用程序范围的属性
    • #attr.objectName:页面,请求,会话或应用程序范围中的属性(按此顺序搜索)

可以通过以下两种方式之一使上面的作用域映射引用(参数,请求,会话和应用程序):

  • #scopeName.objectName 要么
  • #scopeName['objectName']

使用%(百分号)

%{ OGNL expression } 用于强制对通常会解释为String文字的属性进行OGNL评估。

例: <s:property value="myProperty" default="%{myDynamicDefaultValue}" />

@的使用(在符号处)

@符号用于引用静态属性和方法。请注意,您可能需要在Struts2属性中启用它: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>

2020-06-08