`
foryougeljh
  • 浏览: 116491 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JSF事件处理

 
阅读更多
JSF事件

动作事件
在按钮上使用action绑定一个动作方法(action method),实际上JSF会为其自动产生一个「预定义的ActionListener」来处理事件,并根据其传回值来决定导向的页面.
如果您需要使用同一个方法来应付多种事件来源,并想要取得事件来源的相关信息,您可以让处理事件的方法接收一个javax.faces.event.ActionEvent事件参数.

自定义监听事件(实现ActionListener接口)
public class LogHandler implements ActionListener {
public void processAction(ActionEvent e) {
// 监听事件
}
}
注册多个ActionListener
<h:commandButton value="送出" action="#{user.outcome}">
<f:actionListener type="onlyfun.caterpillar.LogHandler"/>
<f:actionListener type="onlyfun.caterpillar.VerifyHandler"/>
</h:commandButton>
<f:actionListener>会自动产生type所指定的对象,并调用组件的addActionListener()方法注册Listener。


即时事件(Immediate Events)
指JSF视图组件在取得请求中该取得的值之后,即立即处理指定的事件,而不再进行后续的转换器处理、验证器
处理、更新模型值等流程

JSF所有的对象调用都是在服务器端执行的,对象调用流程
恢复视图(Restore View)
依客户端传来的session数据或服务器端上的session数据,重建JSF视图组件
获取请求值(Apply Request Values)
JSF视图组件各自获得请求中的属于自己的值,包括旧的值与新的值
执行验证(Process Validations)
转换为对象并进行验证
更新模型值(Update Model Values)
更新Bean或相关的模型值
调用应用(Invoke Application)
执行应用程序相关逻辑
渲染响应页面(Render Response)
对先前的请求处理完之后,产生页面以反应客户端执行结果

对于动作事件(Action Event)来说,组件的动作事件是在套用请求值阶段就生成ActionEvent对象了,但相关的事件处理并不是马上进行,ActionEvent会先被排入队列,然后必须再通过验证、更新方式值阶段,之后才处理队列中的事件.
<h:commandButton value="#{msgs.Text}" immediate="true" actionListener="#{user.changeLocale}"/>

值改变事件
如果使用者改变了JSF输入组件的值后提交表单,就会发生值变事件(Value Change Event),这会丢出一javax.faces.event.ValueChangeEvent对象,如果您想要处理这个事件,有两种方式,
一是直接设定JSF输入组件的valueChangeListener属性
<h:selectOneMenu value="#{user.locale}" onchange="this.form.submit();"
valueChangeListener="#{user.changeLocale}">
<f:selectItem itemValue="zh_CN" itemLabel="Chinese"/>
<f:selectItem itemValue="en" itemLabel="English"/>
</h:selectOneMenu>
另一个方法是实现javax.faces.event.ValueChangeListener接口,并定义其processValueChange()方法,
例如:
<h:selectOneMenu value="#{user.locale}" onchange="this.form.submit();">
<f:valueChangeListener type="onlyfun.caterpillar.SomeListener"/>
<f:selectItem itemValue="zh_CN" itemLabel="Chinese"/>
<f:selectItem itemValue="en" itemLabel="English"/>
</h:selectOneMenu>

Phase事件
JSF的请求执行到反应,完整的过程会经过六个阶段
在每个阶段的前后会引发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:指的是任何的阶段转换时,就进行通知

编写好PhaseListener后, 我们可以在faces-config.xml中向Lifecycle进行注册:
<lifecycle>
<phase-listener>
onlyfun.caterpillar.ShowPhaseListener
</phase-listener>
</lifecycle>

分享到:
评论

相关推荐

    第8章 JSF事件处理(熊)课件及示例程序

    JSF事件处理主要涉及两个核心概念:事件和监听器。事件在JSF中是组件之间通信的方式,当组件的状态发生改变或者执行特定操作时,会触发相应的事件。监听器则负责响应这些事件,执行相关的业务逻辑。 1. **JSF事件...

    JSF的工作方式 JSF架构 JSF模型 JSF事件类型

    在JSF中,事件处理通常通过监听器(Listeners)和处理器(Action Methods)完成,这些可以在管理Bean中定义。监听器用于响应特定类型的事件,而处理器方法则执行与事件相关的操作。 ### JSF配置与导航 为了配置JSF...

    JSF控件详细说明

    ### JSF事件处理 JSF控件支持多种事件,如`action`事件(按钮点击时触发)、`valueChange`事件(输入控件值改变时触发)。通过`actionListener`和`action`属性,开发者可以指定事件触发时调用的服务器端方法。 ###...

    简单jsf程序 供新手学习

    6. **处理事件**:了解JSF事件处理机制,包括监听器和行为。 7. **使用库和框架**:如PrimeFaces或RichFaces等,它们提供了更多组件和功能,可以增强JSF应用的用户体验。 **JSFreg文件**:这个文件可能是JSF注册或...

    各种jsf标签Java语言

    ### JSF事件处理 在JSF中,用户操作如点击按钮会触发事件。这些事件可以由组件本身或者页面上的其他组件监听并处理。JSF使用`&lt;f:ajax&gt;`标签支持异步Ajax请求,使得部分页面内容能够更新,而无需刷新整个页面。 ###...

    JSF生命周期的事件处理

    ### JSF生命周期的事件处理 JavaServer Faces(简称JSF)是Java平台提供的一种用于构建企业级Web应用程序的标准框架。JSF通过定义一套简洁而强大的API来帮助开发者更轻松地开发用户界面。其中,JSF的生命周期管理...

    JSF程序设计

    ### 六、JSF事件处理 JSF允许定义事件监听器,处理用户交互或组件间通信。事件通过事件队列传播,允许组件根据需要响应。 ### 七、JSF与其他技术的集成 JSF可以与EJB、JPA、Spring等框架无缝集成,提供更强大的...

    jsf 练习例子

    视图通常由JSF组件构成,而控制器则由JSF事件处理机制完成。 **3. 面向声明的编程** JSF允许开发者通过XML配置文件(如`faces-config.xml`)声明组件、导航规则等。这使得代码更易于维护和理解。在练习中,你会学习...

    JSF写的数据库增删改查

    6. JSF事件处理和转换验证: - JSF提供了一系列的事件处理机制,如ActionEvent、ValueChangeEvent等,允许在用户交互时执行业务逻辑。 - 验证机制如Converter和Validator可以确保输入数据的有效性,防止非法数据...

    jsf+seam+jpa实例

    JSF事件处理机制使得页面能够响应用户的操作,调用相应的Seam服务。 4. **整合与部署**:将所有组件和页面打包成一个可部署的应用,部署到支持Java EE的服务器上,如Tomcat或WildFly。 5. **测试与优化**:进行...

    jsf学习资料2

    - **JSF事件处理与Spring**: 可以通过Spring的ApplicationListener监听JSF的事件,或者在JSF的Managed Bean中注入Spring的Service进行事件处理。 **2. Spring初始化Bean** 在Spring中,Bean的初始化可以通过多种...

    jsf从入门到精通

    JSF事件处理机制允许组件之间进行通信。一个组件可以触发事件,其他组件可以注册为监听器来响应这些事件。这增强了组件间的交互性和应用的灵活性。 七、JSF与Ajax集成 JSF2.0引入了PrimeFaces和其他库,支持Ajax...

    jsf1.1基础环境平台

    **三、JSF事件处理** JSF 1.1的事件处理基于一个发布/订阅模型,允许组件触发事件,并让其他组件监听并响应这些事件。这种机制使得组件间的通信变得简单,例如,当用户提交一个表单时,可以触发一个事件,由其他组件...

    JSF实战教程中文版.docx

    * JSF事件处理:JSF组件可以产生事件,事件处理器定义了UI和应用的交互方式。 * JSF国际化和校验:JSF支持国际化和校验,能够适应不同语言和文化环境。 三、JSF与其他技术的关系 * JSF与HTTP、Servlet、Portlet、...

    JSF学习用的PPT

    "JSF事件处理机制"深入讲解了JSF中的事件和监听器。开发者会学习如何定义事件,何时触发这些事件,以及如何编写监听器方法来响应事件。这在实现交互性和动态行为时尤为重要。 "JSF国际化"则关注如何使应用支持多...

    operamasks官方jsf教程

    6. **06-Event-Handling.ppt** - JSF事件处理机制让开发者能够响应用户的操作。这部分可能涵盖了如何注册监听器,处理组件事件,以及自定义事件的概念。 7. **07-The-h-Library.ppt** - 这一部分可能专注于JSF的h...

    JSF中文教程及教程代码示例(含所需jar)

    **四、JSF事件处理** JSF中的事件处理允许组件之间通信。事件可以由一个组件触发,然后被另一个组件监听并响应。`&lt;f:ajax&gt;`标签用于异步处理事件,实现页面部分更新。 **五、JSF和Bean** Managed Beans是JSF中的...

    JSF中文教程

    6. **JSF事件处理**:讲解JSF的事件驱动机制,包括事件的触发、监听器的注册和事件处理。 7. **数据验证**:介绍JSF的内置验证机制,以及如何使用Validator接口自定义验证规则。 8. **Ajax支持**:JSF通过富组件...

    JSF入门全系列

    **三、JSF事件处理** 1. **JSF事件模型**:组件可以触发和监听各种类型的动作事件,如ActionEvent、ValueChangeEvent等,通过监听器方法进行处理。 2. **Ajax支持**:JSF 2.x引入了`&lt;f:ajax&gt;`标签,支持局部刷新和...

    JSF标签》简体中文版

    3. **JSF事件处理**:讲解JSF中的事件模型,如何注册监听器和处理各种用户交互事件。 4. **富客户端组件(Rich Client Components)**:讨论JSF与第三方库如PrimeFaces、IceFaces等集成,以实现更丰富的用户体验。 ...

Global site tag (gtag.js) - Google Analytics