`

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

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

</h:panelGrid>
public void processValueChanged(ValueChangeEvent event)
{
HtmlInputText sender = (HtmlInputText)event.getComponent();
sender.setReadonly(true);
changePanel.setRendered(true);
}当inputText的值改变的时候会触发processValueChanged事件,此事情内部通过参数,获取HtmlInputText的控件,然后设定readonly,同时设定panelGrid的模型changePanel的属性,因为panelGrid绑定了changePanel这个模型。

2、Action events(动作事件)
<h:commandButton type="submit" value="Login" action="success"
immediate="true"/>上面这个是静态outcome事件,在faces-config.xml中配置相应的属性后,点击该按钮会转向相应的方法。

<h:commandButton value = "Test Action Listener" actionListener = "#{testActionListener.doSomeAction}" />如果添加了actionListener属性的话,点击之后,在转向其他页面之前,会触发指定的事件,处理之后再转向。
这里的doSomeAction方法的声明是void doSomeAction(ActionEvent actionEvent)。

<h:commandButton type="submit" value="Login"
action="#{loginForm.login}"/>上面这个是动态outcome事件,当点击该按钮之后会直接触发loginForm中的login事件,login事件返回的是一个字符串,在login处理完相应操作之后需要返回一个属性中已经配置过的字符串,例如success,然后JSF根据faces-config.xml中的配置,跳转到相应的页面。login的声明一般是String login();

当然也可以通过程序来添加监听器,不过监听器类需要实现ActionListener接口:
UIComponent myComponent = new UIComponent();
myComponent.addActionListener(new TestActionListener());
myComponent.addActionListener(new CustomActionListener());


3、Data model events(数据模型事件)
FacesContext facesContext = FacesContext.getCurrentInstance();
dataTable = (HtmlDataTable)facesContext.getApplication().createComponent(
HtmlDataTable.COMPONENT_TYPE);
DataModel myDataModel = new ResultSetDataModel(myResultSet);
myDataModel.addDataModelListener(new DataModelListener()
{
public void rowSelected(DataModelEvent e)
{
FacesContext.getCurrentInstance().getExternalContext().
log("row selected:" + e.getRowIndex());
}
});
dataTable.setValue(myDataModel);将上面的代码放入初始化程序中,当行的选择改变的时候就会触发相应的日志打印。
这是因为这段代码给dataTable控件定义了一个数据模型,数据和相应的事件全部存在这个数据模型里面,然后将dataTable与这个模型进行绑定即可使用它所有的数据和事件。点击dataTable上面的一行自然也就会出发相应的行选择事件。

4.Phase events(阶段事件)

这个事件是为了捕捉一些阶段和过程而设定的,有以下几个阶段可以捕捉:


ANY_PHASE 任一阶段
APPLY_REQUEST_VALUES  请求处理阶段的应用请求值阶段
INVOKE_APPLICATION 请求处理阶段的调用程序阶段
PROCESS_VALIDATIONS 请求处理阶段的处理验证阶段
RENDER_RESPONSE  请求处理阶段的描述响应阶段
RESTORE_VIEW 请求处理阶段的恢复视图阶段
UPDATE_MODEL_VALUES 请求处理阶段的更新模型值阶段
具体可以参考http://java.sun.com/javaee/javaserverfaces/1.1_01/docs/api/javax/faces/event/PhaseId.html

通过设定在实现类中设定相应的PhaseId以及添加到faces-config.xml中就可以捕捉相应阶段事件并添加响应的代码

实现类

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

public class CustomPhaseListener implements PhaseListener
{   
    public CustomPhaseListener()
    {
    }

    public void afterPhase(PhaseEvent event)
    {
        System.out.println("After Phase->" + event.getPhaseId());   
    }

    public void beforePhase(PhaseEvent event)
    {
        System.out.println("Before Phase->" + event.getPhaseId());
    }

    public PhaseId getPhaseId()
    {
        return PhaseId.ANY_PHASE;//选择事件标识的常量,此为任一阶段
    }   
}
在faces-config.xml中添加
<lifecycle>
    <phase-listener>
        net.javabeat.articles.jsf.events.actions.TestActionListener
    </phase-listener>
</lifecycle>
当然可以添加无限个的监听器
<lifecycle>
    <phase-listener>PhaseListener1</phase-listener>
    <phase-listener>PhaseListener2</phase-listener>
</lifecycle>
分享到:
评论

相关推荐

    JavaServer Faces in Action(英文版)

    事件处理可以通过监听器(Listeners)进行,开发者可以编写事件处理方法响应这些事件。 3. **转换和验证(Conversion and Validation)**:JSF提供了自动的数据类型转换和输入验证机制,确保用户提交的数据符合预期...

    JavaServer Faces

    2. **事件和监听器(Events and Listeners)**:当用户与UI组件交互时,会产生事件。JSF提供了一种机制来注册事件监听器,处理这些事件并执行相应的业务逻辑。 3. **数据绑定(Data Binding)**:JSF允许将UI组件的...

    JSF(java server faces)开源框架的源代码

    2. **事件(Events)和监听器(Listeners)**:JSF允许组件之间通过事件进行通信。当一个组件触发事件时,可以有多个监听器处理这些事件,这样可以实现不同组件间的交互。 3. **生命周期(Life Cycle)**:JSF有...

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

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

    jsfdemo.zip_JSF写的程序

    6. **事件和监听器(Events and Listeners)**:JSF支持事件模型,允许开发者注册监听器来响应特定的事件。例如,当用户点击登录按钮时,可以触发一个监听器,执行登录操作。 7. **生命周期(Life Cycle)**:JSF...

    java事件传送技术

    8. **Servlet和JSF中的事件处理**:在Web开发中,例如使用Servlet或JavaServer Faces(JSF),也有事件处理机制。例如,JSF提供了`PhaseListener`和`FacesContext`事件,允许在请求处理的不同阶段进行干预。 9. **...

    jsf demo 各种实例

    **JSF(JavaServer Faces)** 是一个Java平台上的用户界面框架,用于构建Web应用程序。它提供了一种组件化和事件驱动的方式来创建交互式的Web界面。JSF的核心概念包括组件、事件、渲染器和生命周期,这使得开发人员...

    JSF.rar_JSF

    【JSF.rar_JSF】这个压缩包文件包含了与JavaServer Faces(JSF)技术相关的资料。JSF是一种Java平台上的用户界面(UI)组件框架,主要用于构建和维护可重用的、组件化的Web应用程序。它提供了MVC(Model-View-...

    JSF1.2写的简单DEMO 对初学者有帮助

    2. **事件(Events)与监听器(Listeners)**:JSF允许组件触发和响应事件。当用户与组件交互时,例如点击按钮,可以引发一个事件,然后由事件监听器进行处理。 3. **数据绑定(Data Binding)**:JSF提供了一种...

    jsf 编程

    4. **事件(Events)和监听器(Listeners)**:JSF支持组件级别的事件和监听器,允许开发者在特定事件发生时执行自定义逻辑。 5. **数据绑定(Data Binding)**:JSF允许将UI组件的值直接绑定到后台bean的属性,...

    jsf +ejb3.0

    2. **事件(Events)和监听器(Listeners)**: 用户操作如点击按钮会触发事件,开发者可以通过监听器方法响应这些事件。 3. **数据绑定(Data Binding)**: JSF允许将组件属性与后台bean的属性直接绑定,简化了数据...

    jsf完全参考手册源代码

    5. **监听器和事件(Listeners and Events)**:JSF允许注册监听器来响应组件或应用程序级别的事件,增强了组件之间的交互性。 6. **Facelets**:是JSF推荐的视图表示技术,它是一种XML-based模板语言,用于创建用户...

    《JSF入门》简体中文版

    **JSF(JavaServer Faces)** 是一个Java平台上的用户界面框架,主要用于构建Web应用程序。它为开发人员提供了一种组件化、事件驱动的方式来创建交互式的用户界面,简化了前端和后端之间的通信。作为Java EE的一部分...

    JSF2.0 Tutorial

    JSF 2.0引入了面部监听器(Facelets Listeners)和面部事件(Facelets Events),实现了一种轻量级的AOP机制。开发者可以定义在特定时刻执行的代码,如在视图被创建或销毁时,提升代码复用和模块化。 **6. 自动验证...

    JSF

    5. **事件和监听器(Events and Listeners)**:JSF支持组件级别的事件处理。当用户触发某个操作(如点击按钮),对应的事件会被生成并传递,开发者可以通过注册监听器来响应这些事件。 6. **数据绑定(Data ...

    Addison.Wesley.The.Java.EE.6.Tutorial.Basic.Concepts.4th.Edition.Aug.2010

    4. **JSF(JavaServer Faces)**:介绍JSF 2.0,它是Java EE中用于构建用户界面的MVC(Model-View-Controller)框架。JSF 2.0改进了组件模型,增强了FacesContext,提供了Facelets作为默认视图表示技术。 5. **CDI...

    jsf-by-example

    2. **事件(Events)与监听器(Listeners)**: 用户在UI组件上的操作会触发JSF事件,开发者可以注册监听器来处理这些事件,实现业务逻辑。 3. **模型(Model)**: 存储应用程序数据的对象,通常通过 Managed Beans ...

    javax.servlet3.0 javax.servlet_jsp2.0源码

    同时,Servlet 3.0引入了监听器(Listeners),如ServletContextListener,用于在Web应用的生命周期事件中执行特定操作。 **JavaServer Pages(JSP)2.0**: JSP 2.0是JSP技术的一个升级,它强化了与Servlet 2.4的...

Global site tag (gtag.js) - Google Analytics