JSF Gossip: 动作事件
2010-12-30 19:03
169 查看
JSF
支援事件处理模型,虽然由于
HTTP
本身无状态(
stateless
)的特性,使得这个模型多少有些地方仍不太相同,但
JSF
所提供的事件处理模型已足以让一些传统
GUI
程式的设计人员,可以用类似的模型来开发程式。
在
简单的导航
中,我们根据动作方法(
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
,例如:
package onlyfun.caterpillar;
import javax.faces.event.ActionListener;
....
public class LogHandler implements ActionListener {
public void processAction(ActionEvent e) {
//
处理
Log
}
}
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
。
支援事件处理模型,虽然由于
HTTP
本身无状态(
stateless
)的特性,使得这个模型多少有些地方仍不太相同,但
JSF
所提供的事件处理模型已足以让一些传统
GUI
程式的设计人员,可以用类似的模型来开发程式。
在
简单的导航
中,我们根据动作方法(
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
,例如:
package onlyfun.caterpillar;
import javax.faces.event.ActionListener;
....
public class LogHandler implements ActionListener {
public void processAction(ActionEvent e) {
//
处理
Log
}
}
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
。
相关文章推荐
- JSF---->事件处理---动作事件
- JSF入门十五(动作事件)
- JSF---->事件处理---动作事件
- GTK Gossip: GDK 事件結構
- 浅谈JSF的两大两点:面向组件编程和事件驱动模式
- [JSF]使用DataModel处理表行事件的实例代码
- JSF Gossip: 导航规则设置
- cocos2dx 3.x(定时器或延时动作自动调用button的点击响应事件)实现自动内测
- Java Server Faces Events And Listeners (JSF中的事件与监听器)
- JSF 2 简介,第 3 部分: 事件处理、JavaScript 和 Ajax
- Spread for Windows Forms快速入门(8)---单元格中用户动作触发的事件
- Legolas工业自动化平台入门(三)交互事件响应动作
- 【cocos2d-x游戏开发】动作事件的监听
- 动作编辑器(Cocos2dx)制作流程详解及附上响应鼠标滚轴事件、反转坐标系、导入/创建资源目录等知识点代码
- 【分享】return false,对阻止事件默认动作的一些测试
- JSF Gossip: JSF Expression Language
- JSF---->事件处理---Phase 事件
- Java_基础—GUI(窗体/鼠标/键盘/动作监听和键盘事件)
- QT用信号和处理机制为事件添加处理动作(点击按钮显示helloworld)
- Android监听事件添加动作的四种方式