在讲ADF之前,先说下JSF的生命周期,在JSF生命周期概述一文中已经介绍过,简单说下JSF的Initial request和postback request的区别吧,Initial request一般发生在点击link标签、地址栏直接访问发生,指的是首次加载页面,只会经过Restore View & Render Response两个阶段;而postback request一般发生在点击按钮提交表单、其它post请求等,它会经历JSF各个生命周期阶段。
对于ADF的InitialRender和Postback也是一样的,页面上的不同操作将会造成不同的结果,详细列表如下:
在输入URL之后首次访问该页面 | InitialRender |
将页面URL之后的状态字符串删除后在URL栏使用回车 | InitialRender |
在页面上使用Submit | Postback |
在页面上使用Partial Submit或Auto Submit | Postback |
使用浏览器的Reload(在确认Resend之后) | Postback |
使用浏览器的Reload(没有确认Resend) | 既没有InitialRender也没有Postback |
Focus在URL栏位后使用回车 | 既没有InitialRender也没有Postback |
将页面URL之后的状态字符串删除后使用浏览器刷新 | 既没有InitialRender也没有Postback |
使用UIC的Action属性从页面A导航至页面B | 页面A为Postback,页面B为InitialRender |
使用浏览器后退和前进在页面A和B之间跳转 | 页面A和页面B均既没有InitialRender也没有Postback |
应用场景:
- 可以利用#{adfFacesContext.initialRender}和#{adfFacesContext.postback}作为是否执行某些操作的判断依据,比如:我想在页面刚加载的时候执行一个方法,但在接下来的页面按钮点击操作不要再执行,这时可以利用InvokeAction,并将refresh设为ifNeeded,refreshCondition设为#{adfFacesContext.postback==false},从而达到目的,如图:
- 以后待补充,基本都是围绕#{adfFacesContext.initialRender}和#{adfFacesContext.postback}的值进行条件判断。
更多文章请见我的个人博客:http://www.acanblog.com