文档章节

JSF---->事件处理---Phase 事件

小强斋太
 小强斋太
发布于 2016/11/09 20:07
字数 827
阅读 0
收藏 0
点赞 0
评论 0

Phase 事件

 

JSF的请求执行到响应,完整的过程会经过六个阶段:

  • 回复画面(Restore View)

  依客户端传来的session数据或伺服端上的session数据,回复JSF画面组件。

  • 套用申请值(Apply Request Values)

  每个组件尝试从到来的请求中找寻自己的参数并更新组件值,在这边会触发ActionEvent,这个事件会被排入队列中,然后在唤起应用程序阶段之后才会真正由事件处理者进行处理。
然而对于设定immeduate为true的命令(Commamnd)组件来说,会立即处理事件并跳过之后的阶段直接绘制响应,而对于设定immediate为true的输入(Input)组件,会马上进行转换验证并处理值变事件,之后跳过接下来的阶段,直接绘制响应。

  • 执行验证(Process Validations)

  进行转换与验证处理,如果验证错误,则会跳过之后的阶段,直接绘制响应,结果是重新呼叫同一页绘制结果。

  • 更新模型值(Update Model Values)

  更新每一个与组件绑定的backing 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.RESTORE_VIEW
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 wsz.ncepu;
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>
            wsz.ncepu.ShowPhaseListener
        </phase-listener>
    </lifecycle>
    ......
</faces-config>
您可以使用这个简单的类别,看看在请求任一个JSF画面时所显示的内容,藉此了解JSF每个阶段的流程变化。
登录的执行结果:
10:59:25,095 INFO  [STDOUT] Before RESTORE_VIEW 1
10:59:25,105 INFO  [STDOUT] After RESTORE_VIEW 1
10:59:25,105 INFO  [STDOUT] Before RENDER_RESPONSE 6
10:59:25,136 INFO  [STDOUT] After RENDER_RESPONSE 6

点击送出之后

10:59:34,966 INFO  [STDOUT] Before RESTORE_VIEW 1
10:59:34,976 INFO  [STDOUT] After RESTORE_VIEW 1
10:59:34,976 INFO  [STDOUT] Before APPLY_REQUEST_VALUES 2
10:59:34,987 INFO  [STDOUT] After APPLY_REQUEST_VALUES 2
10:59:34,987 INFO  [STDOUT] Before PROCESS_VALIDATIONS 3
10:59:34,987 INFO  [STDOUT] After PROCESS_VALIDATIONS 3
10:59:34,987 INFO  [STDOUT] Before UPDATE_MODEL_VALUES 4
10:59:34,987 INFO  [STDOUT] After UPDATE_MODEL_VALUES 4
10:59:34,987 INFO  [STDOUT] Before INVOKE_APPLICATION 5
10:59:34,997 INFO  [STDOUT] After INVOKE_APPLICATION 5
10:59:34,997 INFO  [STDOUT] Before RENDER_RESPONSE 6
10:59:35,247 INFO  [STDOUT] After RENDER_RESPONSE 6

 

 

© 著作权归作者所有

共有 人打赏支持
小强斋太
粉丝 0
博文 181
码字总数 0
作品 0
广州
JSF生命周期(life cycle)

和JSF生命周期相关的请求与响应有两类:分别是Faces response和Non-Faces response,以及Faces request和Non-Faces。 另外有三种场景与此相关分别是: Scenario 1: Non-Faces Request Genera...

崔钢 ⋅ 2011/04/08 ⋅ 0

Java Server Faces Events And Listeners (JSF中的事件与监听器)

JSF的一个核心就是事件与监听。JSF事件分为以下几种: 1、Value-change events(值改变事件) <h:inputText valueChangeListener="#{myForm.processValueChanged}"/> <h:panelGrid binding=......

晨曦之光 ⋅ 2012/03/09 ⋅ 0

使用一个PhaseListener来熟悉JSF 生命周期

作者: cschalk 翻译: icess http://blog.matrix.org.cn/page/icess JSF新手可能常常听到 "JSF Request Processing Lifecycle" ,但是不一定知道在生命周期中都发生了什么事情. 这里有一点代码...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

JSF 探索 (1)

JSF 探索 (1) 虽然JSF已经出来好久了,而且好像感觉不是很潮流的框架了,然后当我看见他的时候,我觉得他的思想很好,而且随着手机等client多样化的出现,我相信人们 必将重新拾起JSF的思想...

linugb118 ⋅ 2010/11/04 ⋅ 0

浅谈 JSF 生命周期

J2EE oracle 官方文档 http://docs.oracle.com/javaee/6/tutorial/doc/docinfo.html 查看其中 Part II Web tier --> javaserver faces technology --> advance concepts (高级概念) 前言:充......

triankg ⋅ 2013/07/22 ⋅ 0

JSF的工作方式 (转)

JSF的工作方式 1.JSF的工作方式 JSF应用是通过处理由页面中组件触发的事件来工作的。这些事件是由用户的动作引起的。比如,当用户单击一个按钮时,按钮会触发一个事件,通过编写监听这个事件...

洋哥6 ⋅ 2012/07/17 ⋅ 0

JSF生命周期总结

JSF实现使用一个控制器servlet 来处理请求,然后执行 JSF 生命周期.如图显示了JSF 生命周期中的事件处理。 上图是正常的JSF组件的生命周期.一共12个. 记住,所有JSF事件都在服务器上执行,当在J...

Zhao-Qian ⋅ 2012/08/10 ⋅ 0

怀疑论者的 JSF: JSF 应用程序的生命周期

级别: 中级 Rick Hightower (rhightower@arc-mind.com), CTO, ArcMind 2005 年 3 月 01 日 本系列怀疑论者的 JSF 一共包含 4 篇文章,本文是其中的第 2 篇。在本文中,Rick Hightower 对 Ja...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

JSF 2 简介,第 3 部分: 事件处理、JavaScript 和 Ajax

确实相当强大。 转自:http://www.ibm.com/developerworks/cn/java/j-jsf2fu3/ 使用更多新 JSF 2 特性增强复合组件 <h:selectOneMenu onchange="submit()" value="#{cc.parent.attrs.locati......

晨曦之光 ⋅ 2012/03/09 ⋅ 0

八大优势能否助JSF统一Web开发

JSF掀起你的盖头来 JSF为什么会受到如此大的青睐,IBM,orcale,包括国内领先的中间件厂商金蝶也投以关注目光。那么它又具有哪些与众不同的优势吸引众商家投怀送抱呢?下面我们就来揭开JSF的...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

骰子游戏代码开源地址

因为阿里云现在服务器已经停用了,所以上面的配置已经失效。 服务端开源地址:https://gitee.com/goalya/chat4.git 客户端开源地址:https://gitee.com/goalya/client4.git 具体运行界面请参考...

算法之名 ⋅ 41分钟前 ⋅ 0

设计模式--装饰者模式

装饰者模式 定义 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比生成子类更为灵活。 通用类图 意图 动态地给一个对象添加一些额外的职责。就增加功能来说,装饰模式相比...

gaob2001 ⋅ 今天 ⋅ 0

JavaScript零基础入门——(八)JavaScript的数组

JavaScript零基础入门——(八)JavaScript的数组 欢迎大家回到我们的JavaScript零基础入门,上一节课我们讲了有关JavaScript正则表达式的相关知识点,便于大家更好的对字符串进行处理。这一...

JandenMa ⋅ 今天 ⋅ 0

sbt网络问题解决方案

转自:http://dblab.xmu.edu.cn/blog/maven-network-problem/ cd ~/.sbt/launchers/0.13.9unzip -q ./sbt-launch.jar 修改 vi sbt/sbt.boot.properties 增加一个oschina库地址: [reposit......

狐狸老侠 ⋅ 今天 ⋅ 0

大数据,必须掌握的10项顶级安全技术

我们看到越来越多的数据泄漏事故、勒索软件和其他类型的网络攻击,这使得安全成为一个热门话题。 去年,企业IT面临的威胁仍然处于非常高的水平,每天都会看到媒体报道大量数据泄漏事故和攻击...

p柯西 ⋅ 今天 ⋅ 0

Linux下安装配置Hadoop2.7.6

前提 安装jdk 下载 wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.7.6/hadoop-2.7.6.tar.gz 解压 配置 vim /etc/profile # 配置java环境变量 export JAVA_HOME=/opt/jdk1......

晨猫 ⋅ 今天 ⋅ 0

crontab工具介绍

crontab crontab 是一个用于设置周期性被执行的任务工具。 周期性执行的任务列表称为Cron Table crontab(选项)(参数) -e:编辑该用户的计时器设置; -l:列出该用户的计时器设置; -r:删除该...

Linux学习笔记 ⋅ 今天 ⋅ 0

深入Java多线程——Java内存模型深入(2)

5. final域的内存语义 5.1 final域的重排序规则 1.对于final域,编译器和处理器要遵守两个重排序规则: (1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用...

江左煤郎 ⋅ 今天 ⋅ 0

面试-正向代理和反向代理

面试-正向代理和反向代理 Nginx 是一个高性能的反向代理服务器,但同时也支持正向代理方式的配置。

秋日芒草 ⋅ 今天 ⋅ 0

Spring 依赖注入(DI)

1、Setter方法注入: 通过设置方法注入依赖。这种方法既简单又常用。 类中定义set()方法: public class HelloWorldOutput{ HelloWorld helloWorld; public void setHelloWorld...

霍淇滨 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部