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开发手册。
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
转载自:http://blog.csdn.net/luyushuang/article/details/6254889
程序员的基础教程:菜鸟程序员