一尘不染

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

jsp

我目前正在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(没有括号)任何想法?


阅读 1066

收藏
2020-06-08

共1个答案

一尘不染

  • ${} -标准的JSP EL表示法。
  • #{}-标准UEL表示法;从未使用过,可能会起作用。
  • %{} -OGNL表达式符号。

JSP EL表示法之所以有效,是因为有一个请求包装器,该请求包装器将首先遵从值堆栈进行查找,然后如果在值堆栈上未找到任何值,则退回到正常的JSP评估。

OGNL表达式符号仅在S2标签内有效。IMO在评估OGNL表达式时应使用,尽管它通常是可选的。 但是,当
它是可选的时,有点废话。通常,buuuut并非总是如此。最好使用它,并保持明确和交流。

可能
会问有关#的变量,像#session#是用来解决值栈这是在“地图”部分上的值。我将值堆栈视为堆栈和范围的组合:如果将对象压入堆栈,则不需要#。如果已
创建 值,则需要#

例如,如果<s:set>用于创建变量,则必须使用#前缀来访问它,例如:

<s:set var="foo" value="'plugh'"/>
<s:property value="#foo"/>
2020-06-08