事件处理
动作事件
JSF支持事件处理模型,虽然由于HTTP本身无状态(stateless)的特性,使得这个模型多少有些地方仍不太相同,但JSF所提供的事件处理模型已足以让一些传统GUI程序的设计人员,可以用类似的模型来开发程序。
在 1.2简单的导航 中,我们根据动作方法(action method)的结果来决定要导向的网页,一个按钮绑定一个方法,这样的作法实际上即使JSF所提供的简化的事件处理程序,在按钮上使用action绑定一个动作方法(action method),实际上JSF会为其自动产生一个「预定义的ActionListener」来处理事件,并根据其传回值来决定导向的页面。
如果您需要使用同一个方法来应付多种事件来源,并想要取得事件来源的相关信息,您可以让处理事件的方法接收一个javax.faces.event.ActionEvent事件参数,例如:
• UserBean.java
package onlyfun.caterpillar;
import javax.faces.event.ActionEvent;
public class UserBean {
private String name;
private String password;
private String errMessage;
private String outcome;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setPassword(String password) {
this.password = password;
}
public String getPassword() {
return password;
}
public void setErrMessage(String errMessage) {
this.errMessage = errMessage;
}
public String getErrMessage() {
return errMessage;
}
public void verify(ActionEvent e) {
if(!name.equals("justin") ||
!password.equals("123456")) {
errMessage = "名称或密码错误" + e.getSource();
outcome = "failure";
}
else {
outcome = "success";
}
}
public String outcome() {
return outcome;
}
}
在上例中,我们让verify方法接收一个ActionEvent对象,当使用者按下按钮,会自动产生ActionEvent对象代表事件来源,我们故意在错误信息之后如上事件来源的字符串描述,这样就可以在显示错误信息时一并显示事件来源描述。
为了提供ActionEvent的存取能力,您的index.jsp可以改写如下:
• index.jsp
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>
<%@page contentType="text/html;charset=Big5"%>
<html>
<head>
<title>第一个JSF程序</title>
</head>
<body>
<f:view>
<h:form>
<h3>请输入您的名称</h3>
<h:outputText value="#{user.errMessage}"/><p>
名称: <h:inputText value="#{user.name}"/><p>
密码: <h:inputSecret value="#{user.password}"/><p>
<h:commandButton value="送出"
actionListener="#{user.verify}"
action="#{user.outcome}"/>
</h:form>
</f:view>
</body>
</html>
主要改变的是按钮上使用了actionListener属性,这种方法可以使用一个ActionListener,JSF会先检查是否有指定的actionListener,然后再检查是否指定了动作方法并产生预定义的ActionListener,并根据其传回值导航页面。
如果您要注册多个ActionListener,例如当使用者按下按钮时,顺便在记录文件中增加一些记录信息,您可以实现javax.faces.event.ActionListener,例如:
• LogHandler.java
package onlyfun.caterpillar;
import javax.faces.event.ActionListener;
....
public class LogHandler implements ActionListener {
public void processAction(ActionEvent e) {
// 处理Log
}
}
• VerifyHandler.java
package onlyfun.caterpillar;
import javax.faces.event.ActionListener;
....
public class VerifyHandler implements ActionListener {
public void processAction(ActionEvent e) {
// 处理验证
}
}
这么一来,您就可以使用<f: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。
分享到:
相关推荐
【标题】"韩顺平_细说jsp第1讲.开山篇" 是一个由知名IT讲师韩顺平主讲的JSP(Java Server Pages)技术入门教程,旨在帮助初学者理解和掌握JSP的基本概念和核心语法。在这个“开山篇”中,韩顺平老师将引导我们走进...
- **JSF(JavaServer Faces)**:将Struts2与JSF结合,利用JSF的组件模型和Struts2的灵活性。 - **Ajax**:利用Struts2的Ajax支持,实现页面局部更新,提高用户体验。 - **Hibernate**:整合ORM框架,简化数据库...
**ejb3 第5讲 -- 通过ANT提高EJB应用的开发效率** EJB(Enterprise JavaBeans)是Java EE平台中的核心组件,用于构建企业级应用程序。EJB 3.0是一个重要的里程碑,它极大地简化了EJB的开发,提高了开发效率。在本...
在提供的文件列表中,我们看到一个名为"第五课讲议.xls"的文件。这很可能是课程的第五课讲义,包含了关于Java EE的特定主题或概念的教学材料。在Excel格式中,它可能包含表格、图表、练习或者讲解,帮助学习者理解并...
在"第一讲.txt"可能涉及JavaEE的基础概念介绍,而"BookStoreSys"可能是一个示例项目,展示了一个基于JavaEE的书店管理系统的设计和实现,包括用户注册登录、书籍浏览、购买等功能,涵盖了上述许多JavaEE技术的实战...
第1讲 Oracle9i简介 目的: 1. 了解数据库的发展,关系数据库的基本原理。 2. 了解目前市场上流行的数据库产品及特点 3. 了解Oracle数据库的发展 4. 掌握Oracle9i产品系列 5. 掌握Oracle9i Database Server的新特点...
byte 8bit, -2^7~2^7-1 (2^7=128; 注意:两个 byte 数相加,变 int 型) short 16bit, -2^15~2^15-1 (2^15=32768) int 32bit, -2^31~2^31-1 (2147483648,20亿,10位有效数字) long 64bit, -2^63~2^63-1 (900亿...
就是JSF。 2:Java微缩版:JME( Java Micro edition) JE(Java, Micro edition)是对标准版JSE进行功能缩减后的版本,于199年6月 由 Sun Microsystems第一次推向Java团体。它是一项能更好满足Java开发人员不同需求 的广泛...