首页 > 编程笔记 > Java笔记

状态模式在JSF源码中的应用

由于源码中一般只提供一种通用的解决方案,所以状态模式的具体应用在源码中非常少见。本节来看 JSF 中的 Lifecycle 类。

JSF 是一个比较经典的前端框架,没用过的小伙伴也没关系,这里只是分析一下其设计思想。

在 JSF 中,所有页面的处理分为 7 个阶段,被定义在 PhaseId 类中,分别用不同的常量来表示周期阶段,源码如下。
private class PhaseId implements Comparable {
    ...
    private static final PhaseId[] values = {
        ANY_PHASE,    // 任意一个生命周期阶段
        RESTORE_VIEW,    // 恢复视图阶段
        APPLY_REQUEST_VALUES,    // 应用请求值阶段
        PROCESS_VALIDATIONS,    // 处理输入校验阶段
        UPDATE_MODEL_VALUES,    // 更新模型的值阶段
        INVOKE_APPLICATION,    // 调用应用阶段
        RENDER_RESPONSE    // 显示响应阶段
    };
    ...
}
这些状态的切换都在 Lifecycle 类的 execute() 方法中进行,其中会传入一个参数 FacesContext 对象,最终所有状态都被 FacesContext 保存。在此不深入分析。
package javax.faces.lifecycle;

import javax.faces.FacesException;
import javax.faces.context.FacesContext;
import javax.faces.event.PhaseListener;

public abstract class Lifecycle {
    public Lifecycle() {
    }

    public abstract void addPhaseListener(PhaseListener var1);

    public abstract void execute(FacesContext var1) throws FacesException;

    public abstract PhaseListener[] getPhaseListeners();

    public abstract void removePhaseListener(PhaseListener var1);

    public abstract void render(FacesContext var1) throws FacesException;
}

所有教程

优秀文章