首页 > 编程笔记 > Java笔记

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

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

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

在 JSF 中,所有页面的处理分为 7 个阶段,被定义在 PhaseId 类中,分别用不同的常量来表示周期阶段,源码如下。
  1. private class PhaseId implements Comparable {
  2. ...
  3. private static final PhaseId[] values = {
  4. ANY_PHASE, // 任意一个生命周期阶段
  5. RESTORE_VIEW, // 恢复视图阶段
  6. APPLY_REQUEST_VALUES, // 应用请求值阶段
  7. PROCESS_VALIDATIONS, // 处理输入校验阶段
  8. UPDATE_MODEL_VALUES, // 更新模型的值阶段
  9. INVOKE_APPLICATION, // 调用应用阶段
  10. RENDER_RESPONSE // 显示响应阶段
  11. };
  12. ...
  13. }
这些状态的切换都在 Lifecycle 类的 execute() 方法中进行,其中会传入一个参数 FacesContext 对象,最终所有状态都被 FacesContext 保存。在此不深入分析。
  1. package javax.faces.lifecycle;
  2.  
  3. import javax.faces.FacesException;
  4. import javax.faces.context.FacesContext;
  5. import javax.faces.event.PhaseListener;
  6.  
  7. public abstract class Lifecycle {
  8. public Lifecycle() {
  9. }
  10.  
  11. public abstract void addPhaseListener(PhaseListener var1);
  12.  
  13. public abstract void execute(FacesContext var1) throws FacesException;
  14.  
  15. public abstract PhaseListener[] getPhaseListeners();
  16.  
  17. public abstract void removePhaseListener(PhaseListener var1);
  18.  
  19. public abstract void render(FacesContext var1) throws FacesException;
  20. }

所有教程

优秀文章