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

发布于 2025-01-08 04:49:20 字数 435 浏览 0 评论 0原文

我目前正在使用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(没有括号)有什么想法吗?

I'm currently working with struts2, and I just don't understand what the difference is between ${var}, #{var}, and %{var} are they different scopes? what are they?

I found an example of the #:

<s:select label="Year"
      id="%{param.name}"
      list="#{'2010':'2010','2011':'2011','2012':'2012','2013':'2013','2014':'2014', '2015':'2015'}"
      value="%{currentYear}"
      required="true"
/>

here it looks like it's an associative array, but there's other times I've seen it as #var (without the brackets) any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

漫漫岁月 2025-01-15 04:49:20
  • ${} - 标准 JSP EL 表示法。
  • #{} - 标准 UEL 表示法;没用过,可能有用。
  • %{} - OGNL 表达式表示法。

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

OGNL 表达式表示法仅在 S2 标记内有效。 IMO 每当您评估 OGNL 表达式时都应该使用它,尽管它通常是可选的。然而,当它是可选的时,就有点糟糕了。经常如此,但并非总是如此。最好使用它并且明确且易于沟通。

可能会询问#变量,例如#session等。#用于解析“地图”部分中的值堆栈。我将值堆栈视为堆栈和作用域的组合:如果已将对象推送到堆栈上,则不需要 #。如果已创建值,则需要#

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

<s:set var="foo" value="'plugh'"/>
<s:property value="#foo"/>
  • ${} - Standard JSP EL notation.
  • #{} - Standard UEL notation; never used it, may work.
  • %{} - OGNL expression notation.

JSP EL notation works because there's a request wrapper that will defer to the value stack for lookups first, then fall back to the normal JSP evaluation if there's no value found on the value stack.

OGNL expression notation is valid only within S2 tags. IMO it should be used whenever you are evaluating an OGNL expression, although it is quite often optional. When it is optional is somewhat of a crap shoot, however. It often is, buuuut not always. Best to use it and be explicit and communicative.

You may be asking about # variables, like #session etc. # is used to resolve a value on the value stack that's in the "map" portion. I view the value stack as a combination stack and scope: if an object has been pushed on the stack, you don't need the #. If a value has been created, you need the #.

For example, if you use <s:set> to create a variable, you must access it using a # prefix, like:

<s:set var="foo" value="'plugh'"/>
<s:property value="#foo"/>
枉心 2025-01-15 04:49:20

另一个注意事项:

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

使用自定义验证器

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

或者

更改下载文件名

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

Just a another note:

You may use $ in your action to ask struts to evaluate your parameters against OGNL before passing it to other methods for example:

Using a custom validator

Struts 2 - reusing Custom Expression Validator

OR

Change the download file name

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文