本文参考
http://www.javaworld.com.tw/confluence/pages/viewpage.action?pageId=2630
所谓的即时事件(Immediate Events),是指JSF视图组件在取得请求中该取得的值之后,即立即处理指定的事件,而不再进行后续的转换器处理、验证器处理、更新模型值等流程。
所有的对象唤起都是在服务器端执行的,至于该唤起什么对象,则是依一个基本的流程:
重建视图(Restore View)
依客户端传来的session数据或服务器端上的session数据,重建JSF视图组件。
套用请求值(Apply Request Values)
JSF视图组件各自获得请求中的属于自己的值,包括旧的值与新的值。
执行验证(Process Validations)
转换为对象并进行验证。
更新模型值(Update Model Values)
更新Bean或相关的模型值。
唤起应用程序(Invoke Application)
执行应用程序相关逻辑。
绘制响应页面(Render Response)
对先前的请求处理完之后,产生页面以反应客户端执行结果。
对于动作事件(Action Event)来说,组件的动作事件是在套用请求值阶段就生成ActionEvent对象了,但相关的事件处理并不是马上进行,ActionEvent会先被排入队列,然后必须再通过验证、更新方式值阶段,之后才处理队列中的事件。
这样的流程对于按下按钮然后执行后端的应用程序来说不成问题,但有些事件并不需要这样的流程,例如只影响页面的事件。
举个例子来说,在表单中可能有使用者名称、密码等栏目,并提供有一个地区选项按钮,使用者可以在不填写名称、密码的情况下,就按下地区选项按钮,如果依照正常的流程,则会进行验证、更新模型值、唤起应用程序等流程,但显然的,使用者名称与密码是空白的,这会引起不必要的错误。
您可以设定组件的事件在套用请求值之后立即被处理,并跳过后续的阶段,直接进行页面绘制以响应请求,对于JSF的input与command组件,都有一个immediate属性可以设定
,只要将其设定为true,则指定的事件就成为即时事件。
一个例子如下: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=UTF8"%>
<f:view locale="#{user.locale}">
<f:loadBundle basename="messages" var="msgs"/>
<html>
<head>
<title><h:outputText value="#{msgs.titleText}"/></title>
</head>
<body>
<h:form>
<h3><h:outputText value="#{msgs.hintText}"/></h3>
<h:outputText value="#{msgs.nameText}"/>:
<h:inputText value="#{user.name}"/><p>
<h:outputText value="#{msgs.passText}"/>:
<h:inputSecret value="#{user.password}"/><p>
<h:commandButton value="#{msgs.commandText}"
action="#{user.verify}"/>
<h:commandButton value="#{msgs.Text}"
immediate="true"
actionListener="#{user.changeLocale}"/>
</h:form>
</body>
</html>
</f:view>
这是一个可以让使用者决定使用语系的示范,最后一个commandButton组件被设定了immediate属性,当按下这个按钮后,JSF套用请求值之后会立即处理指定的actionListener,而不再进行验证、更新模型值,简单的说,就这个程序来说,您在输入栏目与密码栏目中填入的值,不会影响您的user.name与user.password。
基于范例的完整起见,我们列出这个程序Bean对象及faces-config.xml:UserBean.java
package bruce.zhao;
import javax.faces.event.ActionEvent;
public class UserBean {
private String locale = "en";
private String name;
private String password;
private String errMessage;
public void changeLocale(ActionEvent e) {
if(locale.equals("en"))
locale = "zh_CN";
else
locale = "en";
}
public String getLocale() {
if (locale == null) {
locale = "en";
}
return locale;
}
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 String verify() {
if(!name.equals("justin") ||
!password.equals("123456")) {
errMessage = "名称或密码错误";
return "failure";
}
else {
return "success";
}
}
}
faces-config.xml
<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
"http://java.sun.com/dtd/web-facesconfig_1_0.dtd">
<faces-config>
<navigation-rule>
<from-view-id>/pages/index.jsp</from-view-id>
<navigation-case>
<from-outcome>success</from-outcome>
<to-view-id>/pages/welcome.jsp</to-view-id>
</navigation-case>
<navigation-case>
<from-outcome>failure</from-outcome>
<to-view-id>/pages/index.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<managed-bean>
<managed-bean-name>user</managed-bean-name>
<managed-bean-class>
bruce.zhao.UserBean
</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
</faces-config>
信息资源文件的内容则是如下:
titleText=JSF Demo
hintText=Please input your name and password
nameText=name
passText=password
commandText=Submit
Text=\u4e2d\u6587
Text中设定的是「中文」转换为Java Unicode Escape格式的结果,另一个信息资源文件的内容则是英文信息的翻译而已,其转换为Java Unicode Escape格式结果如下:messages_zh_CN.properties
titleText=JSF\u793a\u7bc4
hintText=\u8acb\u8f38\u5165\u540d\u7a31\u8207\u5bc6\u78bc
nameText=\u540d\u7a31
passText=\u5bc6\u78bc
commandText=\u9001\u51fa
Text=English
分享到:
相关推荐
### JSF入门知识点详解 #### 一、JSF概述与入门 **1.1 JSF简介** - **背景与挑战**: - Web应用程序开发相较于传统单机程序开发,在技术层面上面临着诸多挑战,比如HTTP协议的状态无感知特性、多用户并发访问带来...
### JSF入门知识点详解 #### 一、JSF概述 **1.1 简介JSF** JavaServer Faces (JSF) 是一种基于Java的标准技术,用于构建企业级Web应用。JSF的设计目的是简化Web应用程序的开发过程,通过封装HTTP协议的复杂性,...
### JSF入门教程详解 #### 1. 入门篇:JSF概览与实践 ##### 1.1 简介:理解JSF的核心价值 JSF,即JavaServer Faces,是Sun Microsystems(现Oracle)推出的一款用于构建Java Web应用的服务器端组件架构。JSF的...
JSF支持多种类型的事件,包括动作事件(Action Events)、即时事件(Immediate Events)、值变事件(Value Change Events)和Phase事件(Phase Events)。事件处理机制允许用户界面组件响应用户操作,如点击按钮或...
JSF支持多种类型的事件处理,包括动作事件、即时事件和值变更事件等。 ##### 4.1 动作事件 动作事件是最常见的事件类型之一,通常发生在用户点击按钮或其他交互元素时。开发者可以通过定义ActionListener来处理...
### JSF入门知识点详解 #### 一、JSF概述 **JSF**(JavaServer Faces)是一种基于Java EE标准的Web应用程序开发框架,旨在简化企业级Web应用的开发过程。JSF通过提供一套易于使用的标签库和强大的服务器端组件,使得...
### JSF入门精要 **一、JSF概述** JavaServer Faces(简称JSF)是一种构建用户界面的组件型框架,特别适用于企业级Java Web应用的开发。它于2004年由Java Community Process(JCP)团队发布,旨在简化Web应用的...
### JSF入门知识点详解 #### 一、JSF概述与入门 **1.1 JSF简介** JavaServer Faces (简称JSF) 是一种基于Java的标准技术,用于构建企业级Web应用。JSF的设计目的是简化Web应用程序的开发过程,通过封装HTTP协议的...
## JSF入门 JSF的核心理念是通过组件模型、事件模型和数据绑定来简化Web界面的开发。对于初学者,可以从以下几个方面开始学习JSF: 1. **简介**:JSF将HTTP请求处理和页面渲染进行了抽象,提供了丰富的UI组件库和...
### JSF入门知识点详解 #### 一、JSF概述 **JSF**(JavaServer Faces)是一种基于Java EE标准的Web应用程序开发框架,旨在简化企业级Web应用的开发过程。JSF通过提供一套易于使用的标签库和强大的服务器端组件,使得...
**4.2 即时事件** - **实时更新**:用于实现页面部分区域的实时更新,而无需重新加载整个页面。 - **实现**:使用AJAX技术来实现。 **4.3 值变更事件** - **值变化**:当用户更改输入框的值时触发的事件。 - **监听...
- **即时事件**:即时事件是在组件的状态发生变化时触发的,例如用户在文本框中输入内容。 - **值变事件**:当组件的值发生变化时触发的事件,如选择不同的下拉菜单选项。 - **Phase事件**:JSF的生命周期分为多个...
- **4.2 即时事件**:探讨即时事件的概念及其在实时更新场景中的应用。 - **4.3 值变更事件**:讲解当表单字段值发生变化时如何触发相应的事件处理程序。 - **4.4 Phase事件**:了解JSF请求处理周期的不同阶段,以及...
### JSF入门手册知识点解析 #### 一、JSF概览与入门 ##### 1.1 JSF简介 JavaServer Faces(简称JSF)是一种基于Java的Web应用程序框架,主要目的是简化Web应用的开发和维护过程。JSF通过提供一组标准化的用户界面...
- **即时事件类型**:除了动作事件外,JSF 还支持即时事件(如鼠标移动、键盘按键等),增强了用户交互体验。 **4.3 值变更事件** - **值变更事件介绍**:当控件的值发生变化时触发,常用于实时更新数据。 **4.4 ...
JSF入门 #### 1.1 简介JSF JSF是Java EE平台的一部分,提供了一组标准的用户界面组件库,以支持创建动态Web内容。它允许通过预定义的组件和模板来构建用户界面,并提供了一种简单的方式来处理用户交互。 #### 1.2...
#### 三、JSF入门详解 1. **简介** - JSF的设计理念旨在解决Web应用程序开发中常见的难题,如HTTP的无状态性、多用户访问时的线程安全问题以及数据验证与转换处理等。 - JSF的目标之一是让不同背景的开发者(如...