Struts 标签中的 # 、 % 和 $ 符号之间有什么区别?
我正在使用Struts 2,当我访问变量时,我不知道是否使用或。我尝试所有这些,直到找到正确的一个。ValueStack
%
#
$
谁能解释一下它们之间的区别是什么?
我正在使用Struts 2,当我访问变量时,我不知道是否使用或。我尝试所有这些,直到找到正确的一个。ValueStack
%
#
$
谁能解释一下它们之间的区别是什么?
# 的使用(井号)
OGNL 用于引用 ActionContext 中的对象,如下所示:
objectName
:ValueStack 中的对象(OGNL 上下文中的默认/根对象),例如 Action 属性#objectName
:对象在 ActionContext 中,但在 ValueStack 之外,特别是...#objectName
:使用具有默认操作作用域(例如,引用的 Struts2 数据标记创建的 ActionContext 对象)<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 }
用于强制对通常被解释为字符串文本的属性进行 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:
(相当于...)
JSTL:<h1><s:property value="#pageTitle" /></h1>
<h1>${pageTitle}</h1>
该框架使用标准命名上下文来计算 OGNL 表达式。处理OGNL的顶级对象是Map(通常称为上下文映射或上下文)。OGNL有一个概念,即上下文中存在一个根(或默认)对象。在表达式中,可以在没有任何特殊“标记”概念的情况下引用根对象的属性。对其他对象的引用用井号 (#) 标记。
框架将 OGNL 上下文设置为我们的 ActionContext,将值堆栈设置为 OGNL 根对象。(值堆栈是一组多个对象,但对于 OGNL,它似乎是单个对象。除了值堆栈之外,框架还将其他对象放在 ActionContext 中,包括表示应用程序、会话和请求上下文的 Maps。这些对象与值堆栈(我们的 OGNL 根)共存于 ActionContext 中。
|
|--application
|
|--session
context map---|
|--value stack(root)
|
|--request
|
|--parameters
|
|--attr (searches page, request, session, then application scopes)
有关更多详细信息,请参阅此处
基本上,struts2将对象值堆栈作为最上面的对象,并且OGNL用于引用它们.root对象可以在没有任何特殊“标记”的情况下引用,或者与对其他对象的引用用井号(#)标记。# 基本上用于引用来自应用程序/会话等的对象/值。%