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

JKi*_*rtz 16 java variables jsp struts2

我目前正在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"
/>
Run Code Online (Sandbox Code Playgroud)

在这里,它看起来像是一个关联数组,但有时候我已经看到它#var(没有括号)任何想法?

Dav*_*ton 19

  • ${} - 标准JSP EL表示法.
  • #{} - 标准UEL表示法; 从未使用它,可能会工作.
  • %{} - OGNL表达式表示法.

JSP EL表示法的工作原理是因为有一个请求包装器将首先按顺序查找值堆栈,然后如果在值堆栈中找不到值,则返回到正常的JSP计算.

OGNL表达式表示法仅在S2标签内有效.IMO它应该在您评估OGNL表达式时使用,尽管它通常是可选的.然而,它是可选的时候有点像废话.经常是,buuuut并不总是如此.最好使用它,并明确和沟通.

可能会询问有关#变量#session等等#用于解析"map"部分中值堆栈的值.我将值堆栈视为组合堆栈和范围:如果对象已被推入堆栈,则不需要#.如果已创建值,则需要#.

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

<s:set var="foo" value="'plugh'"/>
<s:property value="#foo"/>
Run Code Online (Sandbox Code Playgroud)