我在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引擎进行评估.
Java文档提供了以下说明:
$ {customer.name}
#{customer.name}
前者使用立即评估语法,而后者使用延迟评估语法.第一个表达式访问name属性,获取其值,将值添加到响应中,并在页面上呈现.第二个表达式也会发生同样的情况.但是,如果使用此标记的技术允许,标记处理程序可以将此表达式的计算推迟到页面生命周期的稍后时间.
对于JavaServer Faces技术,在对页面的初始请求期间立即评估后一个标记的表达式.在这种情况下,此表达式充当右值表达式.在回发请求期间,此表达式可用于使用用户输入设置name属性的值.在这种情况下,表达式充当左值表达式.
在这里阅读更多:值表达式