# $ 和 % 有啥区别?

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 等。# 用于解析“映射”部分中的值堆栈上的值。我将值堆栈视为堆栈和范围的组合:如果已将对象推入堆栈,则不需要#。如果值已创建,则需要#

例如,如果您使用&lt;s:set&gt; 创建变量,则必须使用# 前缀访问它,例如:

<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?

【讨论】:

以上是关于# $ 和 % 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

java中接口和类有啥区别java中接口和类有啥区别

Java 非堆内存和栈内存有啥区别?它们是不是相同,如果不同,它们之间有啥区别?

LMS和NLMS有啥区别

退还跟退回有啥区别?退回和退还有啥不同

VBS和JAVA和C++,有啥区别,有啥差距

WebApi和MVC有啥区别