#{} ${} 和 %{} 有什么区别?

16
我目前正在使用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(不带括号),有什么想法吗?


2
相关: JSP EL、JSF EL和统一EL的区别(这只覆盖了非Struts特定的OGNL)。 - BalusC
2个回答

19
  • ${} - JSP标准EL表达式。
  • #{} - 标准UEL表达式; 从未使用过,可能有效。
  • %{} - OGNL表达式符号。

JSP EL表达式之所以有效,是因为有一个请求包装器,它将首先查找值堆栈以查找值,然后如果在值堆栈中找不到值,则退回到正常的JSP评估。

OGNL表达式符号仅在S2标签内有效。在我看来,每当您评估OGNL表达式时都应该使用它,尽管它通常是可选的。何时是可选的有点靠运气。虽然它经常是可选的,但并不总是。最好使用它并且明确地传达意思。

可能正在询问关于#变量,例如#session等。 #用于解析值堆栈中“map”部分的值。我将值堆栈视为组合堆栈和范围:如果已将对象推送到堆栈上,则不需要#。如果已创建一个值,则需要#

例如,如果您使用<s:set>创建一个变量,您必须使用#前缀访问它,如下所示:

<s:set var="foo" value="'plugh'"/>
<s:property value="#foo"/>

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接