理解页面的ADF Lifecycle的Postback和InitialRender

  在讲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)  既没有IntialRender也没有Postback
 Focus在URL栏位后使用回车  既没有IntialRender也没有Postback
 将页面URL之后的状态字符串删除后使用浏览器刷新  既没有IntialRender也没有Postback
 使用UIC的Action属性从页面A导航至页面B  页面A为Postback,页面B为InitialRender
 使用浏览器后退和前进在页面A和B之间跳转  页面A和页面B均既没有IntialRender也没有Postback

  应用场景:

  • 可以利用#{adfFacesContext.initialRender}和#{adfFacesContext.postback}作为是否执行某些操作的判断依据,比如:我想在页面刚加载的时候执行一个方法,但在接下来的页面按钮点击操作不要再执行,这时可以利用InvokeAction,并将refresh设为ifNeeded,refreshCondition设为#{adfFacesContext.postback==false},从而达到目的,如图:

 

  • 以后待补充,基本都是围绕#{adfFacesContext.initialRender}和#{adfFacesContext.postback}的值进行条件判断。

  更多文章请见我的个人博客http://www.acanblog.com

posted @ 2017-03-26 15:09  acanblog  阅读(204)  评论(0编辑  收藏  举报