JSF中request请求的生命周期

 1、恢复视图 :恢复用户所请求的视图的状态,状态的信息可能来自request也可能存在于服务器端,如果没有视图状态, 则予以重建。 倘若先前曾经调用过saveState()方法来存储状态信息,则必须在此阶段调用组件的restoreState()方法。
          
  2、应用请求值: 在本阶段,UIVIewRoot组件的processDecodes()方法会被调用,该方法再递归调用组件树里任何rendered属性为true的组件的同名方法,个别组件在该方法里面会调用组件自己或者所搭配的renderer的decode()方法;对于输入组件而言,其decode()方法的作用是 设定组件的submittedValue属性,若输入组件的immediate属性为true,则调用validate()方法来转换、验证提交值,若转换后的值不同于前一次的值,则validate()方法会添加一个ValueChangeEvent事件到队列中。
       若发现提交的值不正确,则添加一个错误信息到队列,并调用FacesContext的renderResponse()方法。
       对于命令组件而言,如果request恰好是自己触发的,则其decode()方法会添加一个ActionEvent事件到队列。
       在本阶段的最后,所有被标示为需要处理的事件(不管发生于哪一个阶段),其来源组件的broadcast()会被调用一次,借此通知它们的event handler。收到通知的event handler有可能会选择另一个视图,也可能自己产生响应视图。若是前者,它们会调用FacesContext的renderResponse()方法,对于后者,它们会调用FacesContext的responseComplete()方法,改方法会结束request处理过程。


  3、处理验证: 在本阶段,UIViewRoot组件的processValidators()方法会被调用,该方法会递归调用组件树里任何rendered属性为true的组件的同名方法。
        对于输入组件而言,其processValidators()方法会调用组件自己的validate()方法,当该方法发现验证过的值不同于前一次的值,则会添加一个ValueChangeEvent事件到队列中。
        若发现提交的值不正确,则添加一个错误信息到队列,并调用FacesContext的renderResponse()方法。
        在本阶段的最后,所有被标示为需要处理的事件(不管发生于哪一个阶段),其来源组件的broadcast()会被调用一次,借此通知它们的event handler。收到通知的event handler有可能会选择另一个视图,也可能自己产生响应视图。若是前者,它们会调用FacesContext的renderResponse()方法,对于后者,它们会调用FacesContext的responseComplete()方法,改方法会结束request处理过程。
             
 4、更新模型值: 在本阶段,UIViewRoot组件的processUpdatess()方法会被调用,该方法会递归调用组件树里任何rendered属性为true的组件的同名方法。
       对于输入组件而言,它们的processUpdates()方法会调用组件自己的updateModel()方法,借此将组件的local value设定给组件所绑定的应用程序对象的属性,如果不能设定模型属性,则会添加一个错误信息到队列,并调用FacesContext的renderResponse()方法。
        在本阶段的最后,所有被标示为需要处理的事件(不管发生于哪一个阶段),其来源组件的broadcast()会被调用一次,借此通知它们的event handler。收到通知的event handler有可能会选择另一个视图,也可能自己产生响应视图。若是前者,它们会调用FacesContext的renderResponse()方法,对于后者,它们会调用FacesContext的responseComplete()方法,改方法会结束request处理过程。
             
5、 触发后台程序: UIViewRoot组件的processApplication()方法会被调用,该方法会检查每个标示为需要处理的事件(不管发生于哪一个阶段),  其来源组件的broadcast()会被调用一次,借此通知它们的event handler。收到通知的event handler有可能会选择另一个视图,也可能自己产生响应视图。若是前者,它们会调用FacesContext的renderResponse()方法,对于后者,它们会调用FacesContext的responseComplete()方法,改方法会结束request处理过程。
  
6、 绘制响应视图: 组件的saveState()方法有可能在此阶段被调用,而整个组件树的完整状态也有可能被包含于response中(HTML隐藏字段)或者session中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值