当前位置:  开发笔记 > 程序员 > 正文

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

如何解决《Struts标签中的#,%和$符号有什么区别?》经验,为你挑选了2个好方法。

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

任何人都能解释一下这些有什么区别吗?



1> Devon Biere..:

使用#(井号)

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

objectName:ValueStack中的对象(OGNL上下文中的默认/根对象),例如Action属性

#objectName:ActionContext中的对象,但在ValueStack之外,特别是......

#objectName:使用具有默认操作范围的Struts2数据标记创建的ActionContext对象(例如,引用)

#parameters.objectName:请求参数

#request.objectName:请求范围的属性

#session.objectName:会话范围的属性

#application.objectName:应用程序范围的属性

#attr.objectName:页面,请求,会话或应用程序范围中的属性(按该顺序搜索)

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

#scopeName.objectName 要么

#scopeName['objectName']

使用%(百分号)

%{ OGNL expression } 用于强制OGNL评估通常被解释为字符串文字的属性.

例:

使用@(在标志处)

@符号用于引用静态属性和方法.请注意,您可能需要在Struts2属性中启用它:struts.ognl.allowStaticMethodAccess=true

例子:

@my.package.ClassName@MY_STATIC_PROPERTY
@my.package.ClassName@myStaticMethod

使用$(美元符号)

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

Struts2 :(


相当于......)
JSTL:

${pageTitle}


关于$,请注意``是xss hack安全,而`$ {}`不是.小心使用`$ {}`!

2> Umesh Awasth..:

该框架使用标准命名上下文来评估OGNL表达式.处理OGNL的顶级对象是Map(通常称为上下文映射或上下文).OGNL有一个概念,即在上下文中有一个根(或默认)对象.在表达式中,可以在没有任何特殊"标记"概念的情况下引用根对象的属性.对其他对象的引用标有井号(#).

框架将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把对象值Stack作为最顶层对象,OGNL用于引用它们.引用对象可以在没有任何特殊"标记"的情况下%引用,或者引用其他对象时用井号(#)标记.#主要用于从Application/Session等引用对象/值.

推荐阅读
135369一生真爱_890
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有