这里有一点代码, 一个 PhaseListener, 我们可以用她来了解 JSF's Request Processing Lifecycle如何工作的.
下面是一个在生命周期开始和结束时执行的一个简单的PhaseListener
package com.jsf;
import javax.faces.event.PhaseListener;
import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
public class MyPhaseListener implements PhaseListener
{
public MyPhaseListener()
{
}
public void beforePhase(PhaseEvent pe)
{
if (pe.getPhaseId() == PhaseId.RESTORE_VIEW)
System.out.println("Processing new Request!");
System.out.println("before - " + pe.getPhaseId().toString());
}
public void afterPhase(PhaseEvent pe)
{
System.out.println("after - " + pe.getPhaseId().toString());
if (pe.getPhaseId() == PhaseId.RENDER_RESPONSE)
System.out.println("Done with Request!\n");
}
public PhaseId getPhaseId()
{
return PhaseId.ANY_PHASE;
}
}
当每一个阶段开始和结束的时候,她 在控制台上打印出一些东西. 你需要在 faces-config.xml中来注册该listener
<lifecycle>
<phase-listener>com.jsf.MyPhaseListener />
</lifecycle>
一旦你注册了 PhaseListener, 你就可以开始写个小程序来测试了. 我们使用一个简单的程序,一个输入表单和按钮:
<h:commandButton value="button" action="#{backingbean.button_action}"/>
按钮绑定了一个manage bean的动作方法.:
public String button_action()
{
System.out.println("Action event processed...");
return "success";
}
运行该页面可以看到下面的输出,.:
Processing new Request!
before - RESTORE_VIEW 1
after - RESTORE_VIEW 1
before - APPLY_REQUEST_VALUES 2
after - APPLY_REQUEST_VALUES 2
before - PROCESS_VALIDATIONS 3
after - PROCESS_VALIDATIONS 3
before - UPDATE_MODEL_VALUES 4
after - UPDATE_MODEL_VALUES 4
before - INVOKE_APPLICATION 5
Action event bean processed... //这里是 button action在backbean中的执行事件
after - INVOKE_APPLICATION 5
before - RENDER_RESPONSE 6
after - RENDER_RESPONSE 6
Done with Request!
注意在第一个请求 (non-postback) ,只有两个阶段, RESTORE_VIEW and RENDER_RESPONSE..这说明她只是创建 UI component tree然后显示她 . 下一步,你点击按钮,注意打印的消息. 这次她通过了整个jsf生命周期. 注意,按钮点击的动作事件在 INVOKE_APPLICATION phase处理...
现在,作为一个实验,把 commandButton 的 immediate 属性改变为 true ,看看如何影响动作事件的处理的.
下一步你可能想添加一个输入表单,并且添加一个 ValueChangeListener 来显示一个值变化事件.
A new input field...
<h:inputText value="foo">
<f:valueChangeListener type="com.jsf.MyValueChangeListener"/>
</h:inputText>
下面是ValueChangeListener代码..
package com.jsf;
import javax.faces.event.ValueChangeListener;
import javax.faces.event.ValueChangeEvent;
import javax.faces.event.AbortProcessingException;
public class MyValueChangeListener implements ValueChangeListener
{
public MyValueChangeListener()
{
}
public void processValueChange(ValueChangeEvent vce) throws AbortProcessingException
{
System.out.println("A value has changed!");
}
}
这里你不需要在faces配置文件中注册 ValueChangeListener,你可以直接运行程序,看看有什么信息打印出来.
Processing new Request!
before - RESTORE_VIEW 1
after - RESTORE_VIEW 1
before - APPLY_REQUEST_VALUES 2
Action event bean processed... //这里是 button action在backbean中的执行事件
after - APPLY_REQUEST_VALUES 2
before - RENDER_RESPONSE 6
after - RENDER_RESPONSE 6
Done with Request!
输入一个值在输入表单中, 看看有什么发生.
Processing new Request!
before - RESTORE_VIEW 1
after - RESTORE_VIEW 1
before - APPLY_REQUEST_VALUES 2
after - APPLY_REQUEST_VALUES 2
before - PROCESS_VALIDATIONS 3
A value has changed! //inputtext的valuechangelistener
after - PROCESS_VALIDATIONS 3
before - UPDATE_MODEL_VALUES 4
after - UPDATE_MODEL_VALUES 4
before - INVOKE_APPLICATION 5
Action event bean processed... //这里是 button action在backbean中的执行事件
after - INVOKE_APPLICATION 5
before - RENDER_RESPONSE 6
after - RENDER_RESPONSE 6
Done with Request!
分享到:
相关推荐
JSF生命周期主要分为6个阶段:恢复视图、应用请求值、过程验证、更新模型值、调用应用逻辑和渲染响应。这些阶段构成了一个处理HTTP请求的连贯流程,使得开发者能够更好地组织和管理Web应用程序的各个组件。 1. **...
在JSF生命周期的不同阶段,事件被处理并传播给已注册的监听器。监听器可以决定是否中断或继续生命周期。例如,如果监听器在处理值变化事件时发现错误,它可以调用`renderResponse()`来跳过后续的生命周期阶段,直接...
例如,`PhaseListener`允许你在JSF生命周期的不同阶段介入,进行额外的处理或验证。在你的项目中,可能已经创建了一些自定义的监听器来处理特定的业务逻辑或用户体验需求。 接着,我们讨论JSF转换器。转换器的主要...
- **配置JSF生命周期监听器** 具体的配置示例可以参考前面提到的`web.xml`部分。 #### 3.2 Sun JSF RI 如果使用的JSF实现是Sun的JSF RI(Reference Implementation),则需要确保兼容性设置正确。例如,可以在`...
API提供了如`UIComponent`、`FacesContext`、`PhaseListener`等核心组件和上下文对象,它们构成了JSF生命周期的基础。开发者可以使用这些接口来创建自定义组件,实现监听器,以及处理请求和响应。 ### 2. `jsf-ri` ...
5. **Phase Listeners** - 监听JSF生命周期各个阶段的监听器,可以用来进行自定义逻辑处理。 6. **Navigation** - 控制页面间跳转的机制,基于用户操作或验证结果决定下一步去哪里。 通过对"jsfdemo"中的例子进行...
2. **JSF请求生成JSF响应**:这是最常见的场景,当用户通过JSF组件提交表单时,请求会映射到JSF实现的控制器,然后按生命周期的顺序执行,包括解析请求参数、更新模型值、执行验证和事件处理等。 **生命周期情景** ...
在JSF页面上,可以使用`<f:event>`标签添加事件监听器,它会附加到指定的组件生命周期阶段。例如: ```xml ``` 这里的`type`属性指定了事件类型,`listener`属性引用了处理事件的方法。 另一方面,`<f:ajax>`...
JSF生命周期** 理解JSF的生命周期是关键。这包括请求处理、组件树的构建、值绑定的更新、验证、模型更新和视图渲染等步骤。在IBM的JSF学习资料中,可能会有详细的生命周期示例,帮助开发者了解何时执行特定操作。 ...
组件通过监听事件、进行数据验证等方式参与JSF生命周期的不同阶段。 - **渲染器(Renderer)**:渲染器负责将组件转换成客户端可以理解的形式,通常是HTML。它决定了组件在网页上的外观和行为。 #### 三、简单...
JSF生命周期** JSF应用遵循一套预定义的生命周期,包括六个阶段:恢复视图、应用请求值、处理验证、更新模型值、调用应用逻辑和渲染响应。在每个阶段,开发者都可以插入自定义的行为。 **4. JSF渲染** 渲染阶段是...
1. **JSF生命周期**:JSF组件有其独特的生命周期,包括六种阶段:恢复视图、应用请求值、处理验证、更新模型值、调用应用程序和呈现响应。每个阶段都有特定的任务,例如在恢复视图阶段,JSF会重新创建和填充组件树;...
5. **JSF生命周期**: JSF请求处理遵循一系列的生命周期阶段,包括恢复视图、应用请求值、处理验证、更新模型值、调用应用逻辑、渲染响应等。每个阶段都有机会执行事件监听器,如在某个阶段抛出`...
通过这个入门指南,你可以学习到JSF的基础知识,包括如何创建简单的JSF应用程序、理解和使用JSF组件、配置和管理Managed Beans,以及掌握JSF生命周期和Ajax支持。继续深入研究,你将能够利用JSF构建高效、可维护的...
1. **生命周期监听器**:`<lifecycle>`元素下的`<phase-listener>`可以添加自定义的监听器来扩展JSF生命周期的各个阶段。 2. **类型转换**:`<converter>`元素允许定义自定义的转换器,如`<converter-id>`和`...
7. **PhaseListener**: 可以监听JSF生命周期的各个阶段,进行自定义处理。 **JSF生命周期** JSF组件的生命周期分为6个阶段: 1. **恢复视图**: JSF从服务器缓存中恢复已渲染的视图。 2. **应用请求值**: 将请求...
- **控制器(Controller)**:JSF生命周期处理用户请求,执行验证、更新模型和调用业务逻辑。 ### JSF模型 JSF模型是应用程序的数据层,由管理Bean(Managed Beans)组成,它们是Java类,包含了应用程序的业务逻辑...
4. **JSF生命周期** - JSF处理请求时会经历一系列的生命周期阶段,包括恢复视图、应用请求值、处理验证、更新模型值、调用应用事件和渲染响应。 - 每个阶段都有特定的任务,例如在处理验证阶段,JSF会检查用户输入...
**JSF(JavaServer Faces)概述** ...通过学习和实践这个样本,开发者可以更好地理解如何使用JSF构建动态的、数据驱动的Web应用程序,掌握组件使用、EL表达式、Managed Beans以及JSF生命周期等核心概念。