2012-01-09 27 views
65

我在JSF2中編程,netbeans創建了包含表達式的#{}的許多頁面。

但有時在網上我發現${}爲同樣的事情!

有什麼區別嗎?他們是什麼?

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

+5

([JSP EL,JSF EL和統一EL之間的不同]的可能重複http://stackoverflow.com/questions/4812755/difference-between-jsp-el- JSF-EL-和統一-EL)。在我們的EL wiki頁面中也提到了上述內容(將鼠標放在問題下方的[[el]'標籤上方並單擊顯示的黑色popbox中的* info *鏈接)。 – BalusC 2012-01-09 16:19:58

回答

72

#{}用於延遲表達式(延遲表達式根據頁面的生命週期進行解析),並且可用於讀取或寫入或發送到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

7

這是個好問題!我遇到一次,像你一樣,有很多的麻煩找到了答案......直到我偶然發現了這片documentation

統一EL的一個主要特點是其對當前和遞延評價支持的表達。即時評估意味着JSP引擎會評估表達式,並在第一次渲染頁面時立即返回結果。延期評估意味着使用表達式語言的技術可以使用自己的機制在頁面生命週期的某個時候評估表達式,只要這樣做是合適的。那些被立即評估的表達式使用$ {}語法,它是用JSP 2.0表達式語言引入的。表達式的評估延遲使用JavaServer Faces技術引入的#{}語法。

+0

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

4

JSF EL使用哈希(#)在JSP EL使用美元符號($) 在JSF1.2兩種語法進行統一

+0

你能否提供一些支持這種統一的文檔 – dakait 2013-01-03 12:30:00

+0

http://stackoverflow.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

9

谷歌搜索「Java服務器面臨美元英鎊」的一聲下面的結果,從JBoss表達式語言FAQ:

爲什麼有些表情開始與英鎊和其他用美元符號開始?

對於EL規範本身,沒有區別。這取決於使用EL來確定其含義的技術。對於JSP和JSF,以磅符號開頭的表達式意味着延期評估和美元符號意味着即時評估。這一切都與在請求處理期間實際評估表達式時有關。井號用於JSF組件中,因爲我們希望表達式由JSF生命週期評估,而不是由JSP或Facelets引擎評估。

+1

@ jean hominal:thanmk你爲你的答案...正如我寫的,我試圖搜索使用$和#,它不工作... howecver我不知道你叫#「磅」!所以,謝謝你的這些信息! – Filippo1980 2012-01-09 16:31:33

4

Java文檔給出瞭如下解釋:

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

前者使用即時評價語法,而後者則採用資產評估語法。第一個表達式訪問name屬性,獲取其值,將值添加到響應中,並在頁面上呈現。第二個表達式可能會發生同樣的情況。但是,如果使用此標記的技術允許,則標記處理程序可以將此表達式的評估推遲到頁面生命週期的稍後時間。

對於JavaServer Faces技術,後一個標記的表達式會在頁面的初始請求期間立即進行評估。在這種情況下,該表達式用作右值表達式。在回發請求期間,此表達式可用於通過用戶輸入設置name屬性的值。在這種情況下,該表達式用作左值表達式。

在這裏閱讀更多:value expressions

相關問題