2010-11-27 81 views
2

我今天在閱讀關於JSF生命週期的articleJSF - 關於生命週期的問題

我有一些麻煩明白以下幾點:

1 - 第3階段:處理檢驗 - 這是在其中該部件可以驗證它們的新值的相位。 如果新值有效且與先前值不同,則會創建值更改事件並將其放入隊列中。因此,在我們的示例中,如果用戶在提交表單之前更改名稱,則ValueChangeEvent對象將由名稱文本框對應的UIInput組件對象創建,並在此階段末尾將其排隊以供處理。。這是valueChangeInput方法在支持bean被調用。

JSF如何知道舊值與新值的區別?視圖對象的實例是2?前一個(請求前的)和新的? (它們具有上一個進程添加的FacesContext上的值,應用請求值)

2 - 階段5:調用應用程序 - 一旦請求的所有值已成功設置爲支持bean,應用請求值階段將被處理。 在我們的例子中,提交按鈕的操作方法。

因此,它直接發送FacesContext的實例到最後階段(渲染響應),將UI元素(及其值)轉換爲Html。那麼,什麼時候(bean的)getter方法被調用?

乾杯

回答

4

JSF怎樣才能知道舊值和新之間的差異?視圖對象的實例是2?前一個(請求前的)和新的? (它們具有上一個處理添加的FacesContext上的值,應用請求值)

舊值是當前模型值。新值是提交的值。隨着下面的例子中,

<h:inputText value="#{bean.value}" /> 

JSF將基本上執行以下操作(略去了轉換/驗證):

Object oldValue = bean.getValue(); 
Object newValue = request.getParameter(clientId); 
if (oldValue == null ? newValue != null : !oldValue.equals(newValue)) { 
    // Create and queue ValueChangeEvent. 
} 

所以它發送的FacesContext直接的實例最後階段(渲染響應)將UI元素(及其值)轉換爲Html。

不完全是這樣,但是,當調用操作完成時,呈現響應將會啓動。


所以,那是什麼時候(的豆)的getter方法被稱爲?

是的,這隻會在渲染響應時發生,只有當它們綁定在視圖中。

您可以在另一篇文章中找到here,它以更實用的方式解釋了JSF生命週期。

+0

關於第一點的答案:好的,它從bean中獲取值。但是,如果bean是請求作用域,那麼當我創建視圖時,所有的值都將爲空。 (並且應該調用valueChange處理程序?)。關於第二點:我不明白。因此,它將視圖實例(FacesContext)中的值設置爲生命週期的第一個點,並且如果驗證(或轉換)不發生錯誤,它將從bean中獲取相同的值?聲音bizzarre,這是我說我不明白:)我今天下午看了你的文章......但仍然不清楚。我需要再練習一次...... – markzzz 2010-11-27 20:26:43