【问题标题】:What is the difference between #{...} and ${...} in EL Syntax [duplicate]EL语法中的#{...}和${...}有什么区别[重复]
【发布时间】:2011-11-04 18:43:51
【问题描述】:

如您所见,我的问题很简单。

EL语法中#{...}${...}有什么区别?

【问题讨论】:

  • @McDowell:是的。我看到完全重复的:-S。我相信在这里我们有很好的答案。但是我不确定是否删除它。

标签: jsf jakarta-ee el


【解决方案1】:

简单地说,${} 只能做一个get,而#{} 可以做一个get 一个set 的值。

在旧版 JSP 上的 JSF 中,#{} 语法对于触发托管 bean 的自动创建以及将请求参数设置为模型值是必需的。如果您在 JSF 页面中使用了 ${bean.value},那么如果名称为 bean 的托管 bean 不在范围内,则不会自动创建它。此外,如果表单是在输入组件中使用该值提交的,则不会设置托管 bean 属性value

在 Facelets 上的 JSF 中,${} 被重新解释为 #{},因此它们的行为完全相同。

另见:

【讨论】:

  • 嗨!谢谢回复。我不太明白你的最后一句话:我从docs.oracle.com/javaee/7/tutorial/jsf-facelets003.htm 中获取了简单的JSF 示例,并将h:inputText 组件的value 属性从id=userNo#(延迟)更改为$(立即),并且该应用程序显然工作相同。我错过了什么?
  • @fr_andres 答案是在 JSP 上使用 JSF 编写的。使用 Facelets 时,它们的行为完全相同。另请参阅上述答案中的“另请参阅”链接。
  • 大声笑这就是我的想法,我错过了答案的日期。谢谢,我去看看链接
  • @fr_andres 这应该可以帮助您入门:stackoverflow.com/q/18369356stackoverflow.com/q/4421839。继续浏览“另请参阅”链接。每次。至于关系数据库,我没有特别的偏好。我有使用 PostgreSQL、MySQL 和 DB2 的经验。它们都有自己的一套怪癖,但通常 JPA/Hibernate 可以很好地处理它。
  • @fr_andres 在检索投票或评论时,我通常会根据当前的技术状态不断审查和更新我的答案。
【解决方案2】:

${...} 的结果是一个值,而#{...} 的结果是一个绑定。这种绑定可以反复执行。

EL 区分两种绑定;值绑定和方法绑定。值绑定只是通用方法绑定的一种便利,因为它通过单个表达式同时表示 getter 和 setter。

在某种程度上,${...} 可以与通过表达式将值传递给方法进行比较:

foo(bar.kaz());

在运行时,bar.kaz() 被评估并且 foo 只接收返回的值。 foo 方法对bar.kaz() 一无所知,以后无法再次进行评估。

#{...} 有点类似于将 lambda 传递给方法或旧的匿名内部类:

foo(new IntegerReturn() { public int execute() {
    bar.kaz();
});

在这里,foo 获得了一个IntegerReturn,它可以在它想要的时间任意调用它。

【讨论】:

    【解决方案3】:

    来自source

    考虑这两个值表达式:

    ${book.quantity}
    #{book.quantity}
    

    第一个使用立即评估语法,而第二个使用延迟评估语法。第一个表达式访问数量属性,获取它的值,然后将该值添加到响应中并呈现在页面上。如果在初始请求期间评估第二个表达式,则会发生同样的事情。在这种情况下,两个表达式都是右值表达式。

    【讨论】:

      【解决方案4】:
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      • 2017-02-17
      • 2011-09-27
      • 2013-04-22
      相关资源
      最近更新 更多