# $ 和 % 有啥区别?
Posted
技术标签:
【中文标题】# $ 和 % 有啥区别?【英文标题】:what's the difference between # $ and %?# $ 和 % 有什么区别? 【发布时间】:2012-03-14 08:40:00 【问题描述】:我目前正在使用struts2,我只是不明白$var
、#var
和%var
之间有什么区别,它们是不同的范围吗?他们是什么?
我找到了一个#:
的例子<s:select label="Year"
id="%param.name"
list="#'2010':'2010','2011':'2011','2012':'2012','2013':'2013','2014':'2014', '2015':'2015'"
value="%currentYear"
required="true"
/>
这里看起来像是一个关联数组,但在其他时候我看到它为#var
(不带括号)有什么想法吗?
【问题讨论】:
相关:Difference between JSP EL, JSF EL and Unified EL(这仅不包括特定于 Struts 的 OGNL) 【参考方案1】:$
- 标准 JSP EL 表示法。
#
- 标准 UEL 符号;没用过,可以用。
%
- OGNL 表达式符号。
JSP EL 表示法之所以有效,是因为有一个请求包装器,它将首先遵循值堆栈进行查找,然后如果在值堆栈上没有找到值,则回退到正常的 JSP 评估。
OGNL 表达式符号仅在 S2 标记内有效。每当您评估 OGNL 表达式时,IMO 都应该使用它,尽管它通常是可选的。 当它是可选的,然而,这有点废话。通常是,但并非总是如此。最好使用它并明确和交流。
您可能询问#
变量,例如#session
等。#
用于解析“映射”部分中的值堆栈上的值。我将值堆栈视为堆栈和范围的组合:如果已将对象推入堆栈,则不需要#
。如果值已创建,则需要#
。
例如,如果您使用<s:set>
创建变量,则必须使用#
前缀访问它,例如:
<s:set var="foo" value="'plugh'"/>
<s:property value="#foo"/>
【讨论】:
【参考方案2】:只是另一个说明:
您可以在 action 中使用$
要求 struts 在将参数传递给其他方法之前根据 OGNL 评估您的参数,例如:
使用自定义验证器
Struts 2 - reusing Custom Expression Validator
或
更改下载文件名
Struts 2 Download - How to configure the file name dynamically?
【讨论】:
以上是关于# $ 和 % 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章