2010/01/27

Unified Expression Language(2)

Immediate Evaluation(立即運算)

所有運算使用${}語法被立即運算,這些運算式只可以被使用當做模板文字或是那些允許執行時運算的標籤屬性的值。

接下來的列子展現一個標籤的value屬性使用立即運算運算式來取得total price
從cart這個session-scoped bean



JSF承做運算運算式${sessionScope.cart.total}, 轉換它,然後傳出回傳值給標籤處理者(tag handler)。

立即運算運算式總是是唯讀(read-only)變數運算式,在上面的例子只可以從cart bean取得total price,它無法
設定total price.

Deferred Evaluation(延遲運算)

延遲運算使用#{expr}語法,可以被在頁面生命週期的任何時間點被運算,在JSF的例子裡,依據運算式如何被使用在頁
面中,它的控制者可以運算運算式在不同的生命週期階段。

下面的範例表現一個JSF inputText標籤,這表示一個給使用者輸入值的text field元件,inputText標籤的value
屬性參考到一個指到customer bean的name屬性的延遲運算運算式。



當一個含有該標籤的頁面的初始要求,JSF承做運算#{customer.name}運算式,在取得回應的生命週期階段,在這個階
段,運算式只僅僅存取name的值從customer bean,好像立即運算所做的事。

對於一個回傳要求,JSF承做運算運算式在值被取得在、要求、驗證、傳播從customer bean在不同的生命週期。

如同在這個例子、延遲運算式可以是一個可讀寫的值運算式,它們也可以是方法運算式。

No comments:

Post a Comment