【问题标题】:Whats the difference between "${foo.bar}" and "#{foo.bar}"?“${foo.bar}”和“#{foo.bar}”有什么区别?
【发布时间】:2009-08-21 11:28:48
【问题描述】:

我可以通过使用表达式语言 (EL) 在 .jsp 文件中使用来自我的 Java Bean 的对象。因此我可以通过输入 ${foo.bar} 来获得我的价值。但我也可以使用#{foo.bar}。

任何人都可以解释差异或提供有意义信息的链接吗?

【问题讨论】:

    标签: java jsp jstl el


    【解决方案1】:

    JSP 2.1 spec 对此进行了介绍。

    在 Java EE 中,#{expr} 用于延迟评估${expr} 用于立即评估。延迟表达式 (#{expr}) 表达式只能与接受它们的标记属性一起使用。这是一个 Java EE 约定,但其他域可以强加自己的含义(例如,如果你想use EL in your own templates)。

    【讨论】:

    • 啊哈,有趣,我没有意识到这一点。 +1
    【解决方案2】:

    #{foo.bar} 语法来自 JSF 表达式语言。一些聪明的火花认为使用与 JSP EL 不同的语法是个好主意(即${foo.bar})。我认为一些 JSP 容器可以容忍这种错误,并允许您使用任何一个。

    【讨论】:

    • 所以我可以随时使用 ${...} 并且仅在使用 JSF 的情况下使用 #{...} ,这意味着 #{...} 具有相同的功能...那真的一定是一个明亮的火花:D谢谢;)
    • JSF 从第一天起就是一团糟,从那以后他们就一直试图掩盖裂缝。
    • 好的...但是为什么会一团糟?我是新手,因此我对它没有太多经验;)
    • 投反对票!丝毫没有提到立即/延迟评估,正如 javadocs 中明确解释的那样:docs.oracle.com/javaee/7/tutorial/jsf-el002.htm#BNAHR,至少解释为什么这是一个坏主意......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-25
    • 2012-04-19
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    相关资源
    最近更新 更多