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

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

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


一只甜甜圈
浏览 451回答 3
3回答

呼唤远方

使用#(井号)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>

三国纷争

该框架使用标准命名上下文来评估OGNL表达式。处理OGNL的顶级对象是Map(通常称为上下文映射或上下文)。OGNL的概念是上下文中存在根(或默认)对象。在表达式中,无需任何特殊的“标记”概念即可引用根对象的属性。对其他对象的引用用井号(#)标记。该框架将OGNL上下文设置为我们的ActionContext,并将值堆栈设置为OGNL根对象。(值堆栈是几个对象的集合,但对OGNL来说,它似乎是一个对象。)与值堆栈一起,框架还将其他对象放在ActionContext中,包括表示应用程序,会话和请求上下文的Map。这些对象与值堆栈(我们的OGNL根目录)一起并存于ActionContext中。&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|--application&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|--session&nbsp; &nbsp;context map---|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|--value stack(root)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|--request&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|--parameters&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;|--attr (searches page, request, session, then application scopes)基本上struts2将对象值Stack作为最上面的对象,并使用OGNL来引用它们。可以在没有任何特殊“标记”的情况下引用root对象,%而对其他对象的引用则用井号(#)进行标记。#基本上用于引用Application / Session等中的对象/值。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript