JSF 支持页面的 Ajax 处理。可以支持局部页面处理和局部页面展示。
JSF 中的 Ajax 通过下面两个途径:
- 通过 JavaScript 编码实现
- 通过 f:ajax 以声明方式实现
先看看使用 JavaScript 如何实现。 jsf.js 是在 javax.faces 库中的预定义资源。这个 JS 包含了 JSF 页面支持 Ajax 的 API。在页面中引用需要用到 outputScript 标签:
<h:body>
<!-- . . . -->
<h:outputScript
name="jsf.js"
library="javax.faces"
target="body"/>
<!-- . . . -->
</h:body>
现在,可以向服务器发起一个异步请求了:
<h:form prependId="false">
<h:inputText value="#{user.name}" id="name"/>
<h:inputText value="#{user.password}" id="password"/>
<h:commandButton value="Login"
type="button"
actionListener="#{user.login}"
onclick="jsf.ajax.request(this, event, {execute:
'name password', render: 'status'}); return false;"/>
<h:outputText value="#{user.status}" id="status"/>
</h:form>
在这段代码中:
两个文本输入框用于输入用户名和密码。一个文本输出控件用于展示用户登录状态。
form 中的 prependId 属性设置为 false,用于确保表单中的元素 id 以当前的形式保存。否则,会在元素 id 前面加上 form 的 id。
按钮的 actionListener 属性用于设置点击按钮的时候,后台 bean 调用的方法。现在取代传统的刷新页面展示,jsf.ajax.request 发送了一个异步请求到服务器,这个请求在按钮的 onclick 事件中产生。execute 和 render 属性值是用空格分隔的组件 id。execute 中的组件是输入组件,将会将组件中的值绑定到后台 bean。render 中的组件是展示组件,用于设置收到异步响应后需要刷新的组件。
下表列出了 render 属性可以设置哪些值:
值 | 描述 |
@all | 页面上的所有组件 |
@none | 无组件,这是默认值 |
@this | 触发请求的组件 |
@form | form 表单中的所有组件 |
ID 列表 | 组件 ID 的列表 |
EL 表达式 | 返回一组 String 列表的 EL 表达式 |
execute 属性的值和 render 属性的值类似,不过默认值换成了 @this。
编写一个 User bean,包含 set、get 方法和简单的业务逻辑:
@Named
@SessionScoped
public class User implements Serializable {
private String name;
private String password;
private String status;
public void login(ActionEvent evt) {
if (name.equals(password))
status = "Login successful";
else
status = "Login failed";
}
}
注意 login 方法,它必须使用 javax.faces.event.ActionEvent 作为它的唯一参数。
声明是 Ajax 可以使用 f:ajax。这个标记可以作用于一个组件,也可以作用于多个组件。
上面的代码可以改写为:
<h:form prependId="false">
<h:inputText value="#{user.name}"
id="name"/>
<h:inputText value="#{user.password}"
id="password"/>
<h:commandButton value="Login"
type="button"
actionListener="#{user.login}">
<f:ajax execute="name password"
render="status"/>
</h:commandButton>
<h:outputText value="#{user.status}"
id="status"/>
</h:form>
在这段代码中,使用了 f:ajax 中的 execute 属性指定输入参数,render 属性指定显示参数。默认情况下,如果 f:ajax 用在一个组件上,并且没有指定 event 事件,那么异步请求将会基于它的父组件的默认事件(在这个例子中,父组件是提交按钮)。
可以在 f:ajax 上设置 delay 属性,属性值是毫秒数,用于设置延迟提交的时间。如果在延迟时间到期前有多个请求,那么只会提交最近的那个请求,其它的请求将会被丢弃。
<f:ajax delay="200" ...>
. . .
</f:ajax>
这段代码设置了延迟时间为 200 毫秒,默认是 300 毫秒,但是你可以设置值为 none 来关闭这个功能。
f:ajax 标签中可以包含多个组件:
<f:ajax listener="#{user.checkFormat}">
<h:inputText value="#{user.name}" id="name"/>
<h:inputText value="#{user.password}" id="password"/>
</f:ajax>
在这段代码中,f:ajax 有一个 listener 属性用于指定相关的方法:
public void checkFormat(AjaxBehaviorEvent evt) {
//. . .
}
这个 listener 中的方法将会是所有子组件的默认方法(在这个例子中是 h:inputText 的 valueChange 事件的默认方法),如果你要改变子组件的默认方法,可以在子组件中使用 a:ajax 标签。
文章来源:
http://www.aptusource.org/2014/04/java-ee-7-jsf-ajax/
分享到:
相关推荐
JavaServer Faces (JSF) 是一个用于构建用户界面的Java EE框架,由Apache MyFaces实现。它为开发者提供了丰富的组件库和事件处理模型,使得构建Web应用变得更加简单。JSF的核心概念包括组件、事件和渲染树,这些元素...
5. JSON Processing:Java EE 7中JSON处理API允许开发者使用流式API或对象模型API来处理JSON数据。 6. WebSocket:这种协议允许在客户端和服务器之间建立全双工通信渠道。在Java EE 7中,通过注解和程序化API方式...
本书内容涵盖了Java EE 7的关键技术和实践方法,包括Servlets、JavaServer Pages (JSP)、JavaServer Faces (JSF)、Java Persistence API (JPA)、Enterprise JavaBeans (EJB)等。 #### 详细知识点解析 ##### 1. **...
Seam、JSF(JavaServer Faces)和Ajax4jsf是Java Web开发中重要的技术框架,它们在构建富互联网应用程序(Rich Internet Applications, RIA)时发挥着关键作用。这里,我们将深入探讨这三个技术的核心概念、特点以及...
在Java EE 6中,JavaServer Faces (JSF) 2.0是一个重要的组件框架,用于简化企业级应用程序的用户界面开发。JSF 2.0引入了许多改进,特别是对于页面制作的简化,这主要归功于Facelets的使用。 Facelets是JSF 2.0的...
JSF是Java EE平台中的一个用于构建Web用户界面的MVC(Model-View-Controller)框架。它简化了开发过程,提供了丰富的组件库和事件处理机制。JSF应用程序通常由UI组件、事件、转换和验证以及 backing beans 组成。 *...
Seam、JSF、RichFaces 和 Ajax4jsf 是四个重要的Java Web开发框架和技术,它们在构建现代、交互式Web应用程序中发挥着关键作用。让我们深入探讨这些技术及其结合使用时的知识点。 **1. Seam** Seam是一个开源的Java...
What You Will Learn Use the Java EE 8 and the JavaServer Faces APIs to build Java-based web ... Create and manage an alumni database using JSF, Ajax, web services and Java EE 8’s security features.
7. **JavaServer Faces (JSF) 2.0**:JSF 2.0引入了Facelets作为默认视图表示,支持AJAX,提高了用户体验和开发效率。 8. **统一的注解**:Java EE 6通过统一的注解,如`@Inject`、`@ManagedBean`、`@...
在本教程中,我们将深入探讨如何使用Java EE 6中的核心技术——JavaServer Faces 2.0 (JSF),Enterprise Java Beans 3.1 (包括Session Bean和Message-Driven Bean)以及Java Persistence API (JPA),结合NetBeans IDE...
在实际项目中,"JSF+Spring+Hibernate+AJAX"的组合常被称为"Java EE的金三角",因为它们能够协同工作,提供一个高效、可扩展的开发平台。例如,JSF负责展示层,Spring管理业务逻辑和服务,而Hibernate处理数据持久化...
1. **JavaServer Faces (JSF) 2.0**:作为Java EE 6中的主要用户界面组件模型,JSF 2.0 提供了改进的渲染树,支持 Facelets视图技术,以及自定义标签和组件的增强。它还引入了AJAX功能,允许部分页面更新,提升用户...
Ajax4JSF(全称 AJAX for JavaServer Faces)是Oracle公司开发的一个开源项目,它为JavaServer Faces (JSF) 提供了强大的AJAX支持,使得开发者能够轻松地在JSF应用中实现异步数据处理和用户界面更新,提升了Web应用...
2. JSF(JavaServer Faces):JSF是Java EE的一部分,提供了一种组件化的方式来构建用户界面。它简化了UI开发,通过声明式编程模型,开发者可以更专注于业务逻辑,而非底层细节。在本系统中,JSF被用于构建可重用的...
7. **WebSocket API**:虽然不是Java EE 6的核心部分,但Java EE 7引入了WebSocket API,Java EE 6开发者可能也会关注这一技术,它提供了双向通信的能力,使得实时应用的开发成为可能。 8. **Batch Applications ...
1. **JSF (JavaServer Faces) 1.2**:这是Java EE 5中的用户界面组件模型,提供了创建交互式Web界面的框架。JSF 1.2引入了更多的内置组件,支持Ajax功能,以及对Faces Config配置文件的改进。 2. **EJB (Enterprise...