Struts标签中的#,%和$符号有什么区别?
我正在使用Struts2,当我访问值堆栈variables,我不知道是否使用%或#或$ 。 我尝试所有这些,直到find正确的。 
任何人都可以解释这些有什么区别?
使用#(英镑符号)
OGNL用于引用ActionContext中的对象,如下所示:
-   objectName:ValueStack中的对象(OGNL上下文中的默认/根对象),如Action属性
-   #objectName对象#objectName:对象在ActionContext但在ValueStack之外,具体…-   #objectName:使用Struts2数据标签创build的默认动作范围(例如,<s:set name="foo" value="'Testing'" />,由<s:property value="#foo" />引用的ActionContext对象<s:property value="#foo" />)
-   #parameters.objectName:请求参数
-   #request.objectName:request-scoped属性
-   #session.objectName:会话作用域属性
-   #application.objectName:application-scoped属性
-   #attr.objectName页面,请求,会话或应用程序作用域中的#attr.objectName属性(#attr.objectName顺序search)
 
-   
上面的范围映射引用(参数,请求,会话和应用程序)可以通过以下两种方式之一来实现:
-   #scopeName.objectName或
-  #scopeName['objectName']
使用%(百分号)
  %{ OGNL expression }用于强制OGNL评估通常被解释为string文字的属性。 
 例如: <s:property value="myProperty" default="%{myDynamicDefaultValue}" /> 
@(在符号处)
  @符号用于引用静态属性和方法。 请注意,您可能需要在Struts2属性中启用它: struts.ognl.allowStaticMethodAccess=true 
例子:
 @my.package.ClassName@MY_STATIC_PROPERTY @my.package.ClassName@myStaticMethod 
使用$(美元符号)
Struts2 OGNL并没有特别使用美元符号。 但是,它可以用来评估正常的JSTLexpression式。 例如:
  Struts2: <h1><s:property value="#pageTitle" /></h1> 
  (相当于…) 
  JSTL: <h1>${pageTitle}</h1> 
该框架使用标准的命名上下文来评估OGNLexpression式。 处理OGNL的顶层对象是Map(通常被称为上下文映射或上下文)。 OGNL有一个在上下文中存在根(或默认)对象的概念。 在expression式中,可以引用根对象的属性,而不需要任何特殊的“标记”概念。 其他对象的引用标有井号(#)。
框架将OGNL上下文设置为我们的ActionContext,将值栈设置为OGNL根对象。 (值栈是一组对象,但是对于OGNL来说,它似乎是一个单独的对象。)除了值栈之外,框架还将其他对象放在ActionContext中,包括表示应用程序,会话和请求上下文的地图。 这些对象并存在ActionContext中,与值栈(我们的OGNL根)一起共存。
  | |--application | |--session context map---| |--value stack(root) | |--request | |--parameters | |--attr (searches page, request, session, then application scopes) 
参考这个更多的细节
OGNL基础
 基本上struts2把对象值堆栈作为最顶层的对象,OGNL用于引用them.root对象可以没有任何特殊的“标记”或%引用,而对其他对象的引用标记为井号(#)。  #基本上用来引用Application / Session等中的对象/值 
只要完成@Devon Biere …
使用$(美元符号)
 您也可以在资源文件中使用${} 。  struts会自动使用OGNL来parsing${} 。 例如 
 sample.foo.bar=This is some ${someProperty} //If the someProperty is in valueStack sample.welcome.message=Welcome dear ${#session.CurrentUser.farsiFirstName} 
 请注意这里的$符号只是一个触发器,它要求struts根据OGNL评估string,请不要将它与JSTL中的${}混淆 
Struts 2dynamic消息与OGNL