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

时间:2012-02-23 21:24:21

标签: java jsp variables 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"
/>

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

2 个答案:

答案 0 :(得分:19)

  • ${} - 标准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"/>

答案 1 :(得分:2)

另一个注意事项:

您可以在操作中使用$让struts在将参数传递给其他方法之前根据OGNL评估您的参数,例如:

使用自定义验证器

Struts 2 - reusing Custom Expression Validator

OR

更改下载文件名

Struts 2 Download - How to configure the file name dynamically?