zoukankan      html  css  js  c++  java
  • 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一言以蔽之:拿值。

  • 相关阅读:
    TCP和UDP的区别
    DATAX 实现python调用cmd 系统控制台,实现在开发工具中内嵌datax (python 多行执行cmd命令)
    DATAX 实现java调用cmd 系统控制台,实现在开发工具中内嵌datax
    六大质量属性——可测试性代码层面描述(以“信息领域热词分析系统”为例)
    信息领域热词分析——质量属性
    DATAX 从scv到csv 从csv到mysql
    DATAX避坑点——MySQL到MYSQL,某个垃圾教程(简书)中,误导新手
    DATAX 按照官方实例 python datax.py ./stream2stream.json 乱码
    Python中plot使用方法小白的福音
    Python 最简实现逻辑回归,针对二维数据进行机器学习
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6788879.html
Copyright © 2011-2022 走看看