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

2022-09-03 06:23:22

我目前正在使用 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


答案 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"/>

答案 2

再加一点:

您可以在操作中使用要求 struts 根据 OGNL 评估参数,然后再将其传递给其他方法,例如:$

使用自定义验证程序

Struts 2 - 重用自定义表达式验证器

更改下载文件名

Struts 2 下载 - 如何动态配置文件名?