天天看點

JSF控件的immediate屬性和頁面生命周期

關鍵字:JSF ADF 頁面 生命周期 LifeCycle immediate

JSF中的控件基本都有immediate屬性,對于這個屬性的使用總結如下,更詳細内容可參考Oracle官方文檔。

1,為了更好的了解immediate屬性,先看一下JSF頁面的生命周期:

JSF頁面的生命周期有六個,可參考下面的圖;ADF頁面是建立在JSF頁面基礎上的,它的生命周期包括JSF頁面的六個生命周期外,還包括Init Context and Prepare Model、Validate Model Updates、Metadata Commit和Prepare Render幾個階段。JSPX頁面具有JSF頁面的生命周期還是具有ADF頁面的生命周期,要看頁面是在faces-config.xml還是 adfc-config.xml中管理的。對于生命周期的詳細内容可參考Oracle官方的ADF開發手冊。

JSF控件的immediate屬性和頁面生命周期

2,控件的immediate屬性與控件(component)的轉換校驗邏輯關系緊密。通常,頁面控件中的值在Process Validations階段進行轉換校驗(可參考<af:inputListOfValues>的API);當設定一個控件的immediate屬性為true的時候,控件中的值将會提前在Apply Request Values階段進行轉換校驗。

1)    對于輸入控件,immediate為true的時候,該控件的輸入值的校驗會比immediate為false的早,可以了解為立即執行校驗。當該控件上的校驗失敗的時候,該控件所在頁面的生命周期直接跳轉到Render Response階段,并且所有immediate為false的控件都不執行校驗操作;如果控件上的校驗成功,并且控件的newValue與oldValue不同,就會在Apply Request Values階段觸發一個ValueChangeEvent,而不是正常模式下的Process Validations階段,并且這個ValueChangeEvent的執行也早于這個控件上的其他ActionListener。

2)    對于指令控件,如果immediate為true,頁面的生命周期直接跳轉到Render Response階段,忽略掉validation和model update等階段。經常使用的是Cancel按鈕。

Reference:

Oracle Fusion Middleware 11g: Build Applications with ADF I(Volume I • Student Guide)(D53979GC11)

http://download.oracle.com/docs/cd/E12839_01/apirefs.1111/e12419/tagdoc/af_inputListOfValues.html

Fusion Developer's Guide for Oracle Application Development

繼續閱讀