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

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

最佳答案

使用#(磅符号)

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

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

  • 可以通过以下两种方式之一使上面的作用域映射引用(参数,请求, session 和应用程序):
  • #attr.objectName
  • #scopeName.objectName

  • 使用%(百分号)
    #scopeName['objectName']用于强制对通常会解释为String文字的属性进行OGNL评估。

    示例:%{ OGNL expression }
    使用@(符号)

    @符号用于引用静态属性和方法。请注意,您可能需要在Struts2属性中启用它:<s:property value="myProperty" default="%{myDynamicDefaultValue}" />
    例子:
    @my.package.ClassName@MY_STATIC_PROPERTY
    @my.package.ClassName@myStaticMethod
    

    使用$(美元符号)

    Struts2 OGNL没有特别使用美元符号。但是,它可以用于评估正常的JSTL表达式。例如:

    Struts2:struts.ognl.allowStaticMethodAccess=true (相当于...)
    JSTL:<h1><s:property value="#pageTitle" /></h1>

    关于jsp - Struts标记中的#,%和$号有什么区别?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8007858/

    10-10 07:29