登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

雪舞江淮

真实的生命故事,艰辛的成长足迹。心路里程,愿有缘人同行!

 
 
 

日志

 
 

JSF系列教程(十八) JSF Phase 事件  

2009-04-03 17:41:50|  分类: JSF教程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

在 即时事件 中我们提到,JSF的请求执行到回应,完整的过程会经过六个阶段:

回复画面(Restore View)
  依客户端传来的session资料或伺服端上的session资料,回复JSF画面元件。

套用请求值(Apply Request Values)
  JSF画面元件各自获得请求中的值属于自己的值,包括旧的值与新的值。

执行验证(Process Validations)
  转换为物件并进行验证。

更新模型值(Update Model Values)
  更新Bean或相关的模型值。

唤起应用程式(Invoke Application)
  执行应用程式相关逻辑。

绘製回应画面(Render Response)
  对先前的请求处理完之后,产生画面以回应客户端执行结果。

  在每个阶段的前后会引发javax.faces.event.PhaseEvent,如果您想尝试在每个阶段的前后捕捉这个事件,以进行一些处理,则可以实作javax.faces.event.PhaseListener,并向javax.faces.lifecycle.Lifecycle登记这个Listener,以有适当的时候通知事件的发生。

PhaseListener有三个必须实作的方法getPhaseId()、beforePhase()与afterPhase(),其中getPhaseId()传回一个PhaseId物件,代表Listener想要被通知的时机,可以设定的时机有:


PhaseId.APPLY_REQUEST_VALUES
PhaseId.PROCESS_VALIDATIONS
PhaseId.UPDATE_MODEL_VALUES
PhaseId.INVOKE_APPLICATION
PhaseId.RENDER_RESPONSE
PhaseId.ANY_PHASE

  其中PhaseId.ANY_PHASE指的是任何的阶段转换时,就进行通知;您可以在beforePhase()与afterPhase()中撰写阶段前后撰写分别想要处理的动作,例如下面这个简单的类别会列出每个阶段的名称:

ShowPhaseListener.java


package onlyfun.caterpillar;

 import javax.faces.event.PhaseEvent;
 import javax.faces.event.PhaseId;
 import javax.faces.event.PhaseListener;

 public class ShowPhaseListener implements PhaseListener {

    public void beforePhase(PhaseEvent event) {
        String phaseName = event.getPhaseId().toString();
        System.out.println("Before " + phaseName);
    }

    public void afterPhase(PhaseEvent event) {
        String phaseName = event.getPhaseId().toString();
        System.out.println("After " + phaseName);
    }

    public PhaseId getPhaseId() {
        return PhaseId.ANY_PHASE;
    }
 } 

 撰写好PhaseListener后,我们可以在faces-config.xml中向Lifecycle进行注册:

faces-config.xml


<?xml version="1.0"?>
 <!DOCTYPE faces-config PUBLIC
 "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
 "http://java.sun.com/dtd/web-facesconfig_1_0.dtd">

 <faces-config>
    <lifecycle>
        <phase-listener>
            onlyfun.caterpillar.ShowPhaseListener
        </phase-listener>
    </lifecycle>
    ......
 </faces-config>

  您可以使用这个简单的类别,看看在请求任一个JSF画面时所显示的内容,藉此瞭解JSF每个阶段的流程变化。

  评论这张
 
阅读(1067)| 评论(1)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018