2009-12-04 53 views
11

我以前讀過'Core JSF'的差異,但現在我找不到那個地方。

儘管如此,我不記得在jsf中我們應該使用$ {expr}的時候有一個關於case的字。所以我只是好奇,它有什麼區別(在板栗裏),如果有在JSF應用程序中使用$ {expr}的情況?

回答

23

總結清晰的語言:${expression}只做得到,而#{expression}既可以做得到設置。這是因爲${expression}僅評估一次(立即),而#{expression}評估每個訪問(延遲)。

在JSF的JSP 2.0或Facelets的1.x中,當你把這樣的事情在頁面

${bean.property} 

其中bean是一個請求範圍內管理bean的第一個表情,你會看到什麼。但是如果bean是一個會話範圍的託管bean並且之前已經創建,那麼您將看到正在打印的屬性值。如果請求範圍的託管bean是在同一頁面中由#{bean.xxx}以前創建的,這也適用。

如果你不是做的頁面

#{bean.property} 

的第一個表達式,然後將EL測試,如果bean爲空,如果是這樣,那麼它會設置(創建)一個新的。如果在bean構建期間設置了該屬性,那麼您將看到該表達式顯示的屬性。

這一切都必須在其他JSF UIInput部件如<h:inputText>工作得到。當您提交表格時,#{expression}設置爲這個bean中的值。

8

JavaEE tutorial

使用$ {}語法所有表達式都立即計算。這些表達式只能在模板文本中使用,或者只能用作可以接受運行時表達式的JSP標記屬性的值。 [...] 即時評估表達式總是隻讀值表達式。上面顯示的表達式只能從cart bean獲得總價格;它不能設定總價格。
遞延評估表達式的形式是#{expr}的和通過任何技術是使用表達式定義可以在頁面生命週期的其它階段進行評價。對於JavaServer Faces技術,其控制器可以根據表達式在頁面中的使用方式,在生命週期的不同階段評估表達式。
相關問題