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

Fil*_*980 75 el jsf-2

我在JSF2中编程,netbeans创建了许多#{}包含表达式的页面.

但有时在网上我发现${}同样的事情!

有什么不同吗?这些是什么?

Google会忽略这些字符#{},${}因此难以搜索.

For*_*ato 86

#{}用于延迟表达式(延迟表达式根据页面的生命周期进行解析),可用于读取或写入bean或进行方法调用.$ {}是立即解决的表达式,一旦遇到它们就会被解析.它们是只读的.你可以在这里阅读更多内容:http://docs.oracle.com/javaee/6/tutorial/doc/bnahr.html


Jea*_*nal 11

谷歌搜索"Java Server Faces dollar pound"从JBoss Expression Language FAQ中得到以下结果:

为什么有些表达式以pound开头而其他表达式以美元符号开头?

对于EL规范本身,没有区别.这取决于使用EL来决定它意味着什么的技术.对于JSP和JSF,以井号开头的表达式意味着延迟评估,而美元符号表示立即评估.这一切都与在请求处理期间实际评估表达式有关.井号在JSF组件中使用,因为我们希望表达式由JSF生命周期而不是JSP或Facelets引擎进行评估.


Ósc*_*pez 9

这是个好问题!我曾经和你一样面对它,在找到答案时遇到了很多麻烦......直到我偶然发现这篇文档:

统一EL的一个关键特性是它支持表达式的即时和延迟评估.立即评估意味着JSP引擎评估表达式并在首次呈现页面时立即返回结果.延迟评估意味着使用表达式语言的技术可以使用自己的机制在页面生命周期的某个时间稍后评估表达式,只要适当的话.那些立即计算的表达式使用$ {}语法,该语法是随JSP 2.0表达式语言引入的.延迟评估的表达式使用#{}语法,该语法是由JavaServer Faces技术引入的.


dov*_*mir 5

JSF EL使用井号(#),而JSP EL在jsf1.2中使用美元符号($)


Chr*_*ris 5

Java文档提供了以下说明:

$ {customer.name}
#{customer.name}

前者使用立即评估语法,而后者使用延迟评估语法.第一个表达式访问name属性,获取其值,将值添加到响应中,并在页面上呈现.第二个表达式也会发生同样的情况.但是,如果使用此标记的技术允许,标记处理程序可以将此表达式的计算推迟到页面生命周期的稍后时间.

对于JavaServer Faces技术,在对页面的初始请求期间立即评估后一个标记的表达式.在这种情况下,此表达式充当右值表达式.在回发请求期间,此表达式可用于使用用户输入设置name属性的值.在这种情况下,表达式充当左值表达式.

在这里阅读更多:值表达式