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

问题描述:

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

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

有什么区别吗?他们是什么?

Google忽略字符#$,因此很难搜索。

+5

([JSP EL,JSF EL和统一EL之间的不同]的可能重复http://*.com/questions/4812755/difference-between-jsp-el- JSF-EL-和统一-EL)。在我们的EL wiki页面中也提到了上述内容(将鼠标放在问题下方的[[el]'标签上方并单击显示的黑色popbox中的* info *链接)。 – BalusC 2012-01-09 16:19:58

#{}用于延迟表达式(延迟表达式根据页面的生命周期进行解析),并且可用于读取或写入或发送到bean或进行方法调用。 $ {}是即时解析的表达式,只要遇到问题,它们就会被解析。它们是只读的。 您可以在这里阅读更多:http://docs.oracle.com/javaee/6/tutorial/doc/bnahr.html

+0

@ fortunato:谢谢你的回答! – Filippo1980 2012-01-09 16:26:13

+0

准确解释,很好回答 – thodorisbais 2015-12-02 21:48:18

这是个好问题!我遇到一次,像你一样,有很多的麻烦找到了答案......直到我偶然发现了这片documentation

统一EL的一个主要特点是其对当前和递延评价支持的表达。即时评估意味着JSP引擎会评估表达式,并在第一次渲染页面时立即返回结果。延期评估意味着使用表达式语言的技术可以使用自己的机制在页面生命周期的某个时候评估表达式,只要这样做是合适的。那些被立即评估的表达式使用$ {}语法,它是用JSP 2.0表达式语言引入的。表达式的评估延迟使用JavaServer Faces技术引入的#{}语法。

+0

@ oscar lopez:谢谢! – Filippo1980 2012-01-09 16:33:41

JSF EL使用哈希(#)在JSP EL使用美元符号($) 在JSF1.2两种语法进行统一

+0

你能否提供一些支持这种统一的文档 – dakait 2013-01-03 12:30:00

+0

http://*.com/questions/4812755/difference-between-jsp-el-jsf-el-and-unified-el http://www.artima.com/ lejava/articles/jsf_jspP.html – 2013-01-06 18:45:10

+0

+1回复并提供链接 – dakait 2013-01-06 18:49:47

谷歌搜索“Java服务器面临美元英镑”的一声下面的结果,从JBoss表达式语言FAQ:

为什么有些表情开始与英镑和其他用美元符号开始?

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

+1

@ jean hominal:thanmk你为你的答案...正如我写的,我试图搜索使用$和#,它不工作... howecver我不知道你叫#“磅”!所以,谢谢你的这些信息! – Filippo1980 2012-01-09 16:31:33

Java文档给出了如下解释:

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

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

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

在这里阅读更多:value expressions