JSF教程(8)——生命周期之Apply Request Values Phase

当一个组件树在一个postbacks请求中被恢复之后其中每个组件从request的参数中取得各自的值,这里使用的是processDecodes方法。这个值会保存在本地的每个组件中,在源码中此过程的代码较为简单,因为实现者将取值这个操作全部封装在processDecodes方法中。不过说实话JSF的这部分的实现非常失败,因为在UIViewRoot中有将近两千行代码,这,这,这……

(UIViewRoot.java中的processDecodes方法)

public void processDecodes(FacesContext context) {
        initState();
        notifyBefore(context, PhaseId.APPLY_REQUEST_VALUES);

        try {
            if (!skipPhase) {
                if (context.getPartialViewContext().isPartialRequest() &&
                    !context.getPartialViewContext().isExecuteAll()) {
                    context.getPartialViewContext().processPartial(PhaseId.APPLY_REQUEST_VALUES);
                } else {
                    super.processDecodes(context);
                }
                broadcastEvents(context, PhaseId.APPLY_REQUEST_VALUES);
            }
        } finally {
            clearFacesEvents(context);
            notifyAfter(context, PhaseId.APPLY_REQUEST_VALUES);
        }
    }

如果任何一个解码方法或者监听器的事件调用当前FacesContext实例中的renderResponse方法。JSF的实现者会跳过 Render Response步骤。其实这很好理解在处理组件所需要的值的时候如果遇到错误就会直接渲染页面向用户进行提示。但是笔者在JSF源码中还未找到这部分的实现(衰~)

如果任何的事件在此步骤中加进队列JSF会将这个事件传递给相关的监听器。

如果页面上的一些组件中的immediate属性设置为true那么验证,转化以及事件绑定将都会在这个步骤中进行,如果任何转换失败这个组件会产生一个错误的提示信息。并将这个信息放到FacesContext的显示队列中。这个信息将会在Render Response步骤中显示出来,同理在验证步骤中的验证错误信息也会如此显示出来。

这时如果程序需要重定向到不同的应用资源或者要产生一个响应,并且这个响应没有包含任何JSF组件,那么就直接调用FacesContext.responseComplete方法。

在这个步骤的最后组件将会被赋予新的值,并且消息以及时间将会被放到队列当中等待处理。

如果当前请求被定义为一个局部的请求,那么局部内容会被从FacesContext中恢复,而且局部处理方法会被执行。

上面的每一个段话都是说的在此阶段要处理得各种不同的情况,或者说都是在processDecodes方法中应该考虑到的各个情况,Apply Request Values Phase一言以蔽之:拿值!

JSF教程(8)——生命周期之Apply Request Values Phase,布布扣,bubuko.com

时间: 2024-10-14 18:34:09

JSF教程(8)——生命周期之Apply Request Values Phase的相关文章

JSF教程(10)——生命周期之Update Model Values Phase

在整个JSF生命周期中经历了取值.验证的阶段最终从request中拿到合理的值,下面就是在本阶段给相应的服务端对象(ManageBean)赋值了.JSF实现只是去更新和input组件中value属性对应的bean的属性的值,也就是说如果在界面上没有讲ManageBean的属性"绑定"到Input类的组件中那么这个Bean的属性是不会更新的.这里需要留意的是如果本地的数据不能转化为对应Bean的属性类型,那么生命周期将直接定位到Render Response步骤,这时候页面将会显示错误信

Maven入门教程三----生命周期和插件

生命周期和插件   Maven定义了三套生命周期:clean.default.site,每个生命周期都包含了一些阶段(phase). 三套生命周期相互独立,但各个生命周期中的phase却是有顺序的,且后面的phase依赖于前面的phase. 执行某个phase时,其前面的phase会依顺序执行,但不会触发另外两套生命周期中的任何phase. 如下图: -------------------------------------------------------------------------

Servlet生命周期方法,request.getRequestDispatcher

1,request.getRequestDispatcher 方法全称javax.servlet.ServletRequest.getRequestDispatcher(String) 2,在web.xml中配置url-mapping的时候,需要以/开头,否则tomcat启动过程报错: 3,servlet先调用构造函数,再调用init方法: 不进行http请求tomcat不会初始化servlet,关闭tomcat的时候会调用destroy()方法: package com.stono.servl

JSF教程(9)——生命周期之Process Validations Phase

在这个过程当中JSF的实现者使用processValidators方法处理所有在tree中的组件中注册的验证器.验证的过程就是通过每个组件已有的规则对其已经保存的值进行校验,同时也对输入的值进行校验,前提是组件的immediate属性没有设置为true.从代码来看在UIViewRoot中的这个processValidators方法和上个阶段中的processDecodes基本一致,不用说下一个阶段(Update ModelValues Phase)也会有相类似的方法(processUpdates

JSF教程(11)——生命周期之Invoke Application Phase

在这个阶段JSF实现将处理任何应用界别的事件,例如表单的提交或者链接点击后跳转到另一个页面. 这时如果应用需要重定向不同 的web应用字眼或者产生一个资源其并不喊任何的JSF组件,那么就调用FacesContext.responseComplete方法. 如果正在被处理的这个视图是从重建状态信息从先前的一个请求而且如果一个组件引发了一个事件,那么这些事件将会传递到相关的监听器中. 最终JSF实现者将控制权转移到下一个步骤render Response phase 这个阶段是整个JSF宏观生命周期

JSF生命周期学习

JSF页面的生命周期与JSP页面的生命周期相类似:客户相页面发出HTTP请求,服务器返回翻译成HTML的响应,但JSF提供了更多处理页面的服务.生命周期与页面编写者无关,这个概念主要面对开发人员. 1. 重建视图阶段(Restore View Phase)当请求JSF页面时,如点击按钮或链接,JSF开始重建视图阶段.在 这个阶段JSF建立页面的视图,给视图中的组件设置事件处理器.校验器,在FacesContext中保存视图.FacesContext含有所有处理请 求的信息,所以页面元素包括组件标

JSF控件的immediate属性和页面生命周期

JSF中的控件基本都有immediate属性,对于这个属性的使用总结如下,更详细内容可参考Oracle官方文档. 1,为了更好的理解immediate属性,先看一下JSF页面的生命周期: JSF页面的生命周期有六个,可参考下面的图:ADF页面是建立在JSF页面基础上的,它的生命周期包括JSF页面的六个生命周期外,还包括Init Context and Prepare Model.Validate Model Updates.Metadata Commit和Prepare Render几个阶段.J

request请求生命周期

request请求生命周期 一.request请求分析 1.1. request数据请求 # views.py from rest_framework.views import APIView from rest_framework.response import Response from django.http.request import QueryDict class BookAPIView(APIView): def get(self, request, *args, **kwargs

Maven使用教程三:maven的生命周期及插件机制详解

前言 今天这个算是学习Maven的一个收尾文章,里面内容不局限于标题中提到的,后面还加上了公司实际使用的根据profile配置项目环境以及公司现在用的archetype 模板等例子. 后面还会总结一个大的思维导图记录下自己学习的概括. Maven的生命周期介绍 先来复习几个命令: mvn clean package:打包 mvn clean install:安装到本地 mven clean deploy:部署到远程仓库 mvn有三套完全独立的生命周期,clean.default和site 每套生