【问题标题】: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(不带括号)有什么想法吗?

【问题讨论】:

标签: java jsp variables struts2


【解决方案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?

    【讨论】:

      猜你喜欢
      • 2010-10-02
      • 2011-12-12
      • 2010-09-16
      • 2012-02-06
      • 2011-02-25
      • 2011-11-22
      • 2015-03-26
      • 2013-08-19
      • 2012-05-22
      相关资源
      最近更新 更多