《Java EE 7精粹》—— 3.5 Ajax

3.5 Ajax

JSF原生支持添加Ajax功能到网页。JSF允许局部视图的处理,其中只有视图中的一些组件用于处理该响应。JSF可以摘选页面上的某些组件,渲染局部页面,而不是整个页面。

有以下两种方法可以启用这种支持。

  • 以编程方式使用JavaScript资源。
  • 以声明的方式使用f:ajax组件。

编程方式的Ajax集成是通过资源处理机制启用的。jsf.js是在javax.faces库中预定义的资源。该资源包含用于Ajax和JSF页面交互的JavaScript API。可以在页面中使用outputScript标签来启用:

也可以向服务器发起异步请求:

在这段代码中:

  • 前两个输入文本字段接受用户名和密码,第三个输出字段显示状态(用户是否已登录)。
  • 表单的prependId属性设置为false,以确保表单内的每个元素定义的id命名会被保留下来。否则,JSF会将表单的id加到其子元素id的前面。
  • 命令按钮组件的actionListener属性用于指定backing bean中的方法,该方法在按钮被点击时调用。通常的响应会渲染和展示另外一个页面,而异步请求在同一个页面完成。jsf.ajax.request发送异步请求到服务器,这个请求由命令按钮的onclick事件产生。请求参数execute和render提供了使用空格分隔的组件标识符。execute定义的是输入组件列表,其对应Bean的setter方法被调用,render定义的是在异步响应被接收后需要渲染的组件列表。

只处理视图的一部分组件(本例中是指name和password组件)的能力被称为局部视图处理。类似地,只渲染输出页面中一部分组件(本例中是status组件)被称为局部输出渲染。

表3-3列出了渲染(render)属性的取值。

执行(execute)属性采用了类似的取值,但该属性的默认值是@this。

User bean包含字段、setter/ getter方法和一个简单的业务方法:

注意login方法的签名。它必须返回void,并使用javax.faces.event.ActionEvent作为唯一的参数。

通过启用f:ajax来声明Ajax集成。该标签可以嵌套在一个组件内(为单个组件启用Ajax),或者使用该组件“包装”多个组件(为多个组件启用Ajax)。

上面的代码可以被更新为如下风格的Ajax:

在这段代码中,我们使用f:ajax的execute属性来指定输入组件的列表,使用render属性指定被渲染的输出组件。默认情况下,如果f:ajax嵌套在一个组件内,并且没有指定事件,异步请求的触发将基于父组件的默认事件(本例中,是指命令按钮的单击事件)。

可以在f:ajax中指定延迟(delay)属性。该属性值以毫秒为单位。如果在延迟时间内有多个请求发出,那么只有最近的请求被发送,其他的请求被丢弃。

这段代码设置的延迟为200毫秒。默认值是300毫秒,但你也可以指定属性值为none来禁用此机制。

f:ajax标签可以包装多个组件:

在这段代码中,f:ajax的listener属性对应的Java方法如下:

这个listener方法被子组件的默认事件调用(本例中,是指h:inputText组件的值改变事件)。可以在子组件的内嵌f:ajax中指定额外的Ajax功能。

时间: 2024-11-10 11:59:54

《Java EE 7精粹》—— 3.5 Ajax的相关文章

《Java EE 7精粹》—— 导读

前言 Java EE 7平台建立在以前的版本之上,侧重于提高生产力和拥抱HTML5.本书面向的是想快速概览这个平台和回来复习基础知识的读者. 本书提供了Java EE 7平台中关键规范的概述(每章一个规范).本书绝不是一本介绍不同规范中每一个概念的详尽指南或教程,而是通过简单的代码示例来解释不同规范的主要概念.阅读本书,无需具备Java EE平台早期版本的知识,但你需要对Java有一些基本了解,以便理解代码. 这本书的重要部分来自<Java EE 6 Pocket Guide>(O'Reill

《Java EE 7精粹》—— 1.2 可交付成果

1.2 可交付成果 Java EE 7平台是遵从JCP 2.9作为JSR 342而开发的.JCP过程对每一个JSR定义了以下三个主要可交付成果. 1.2.1 规范(Specification) 描述了被提议的组件及其功能的一份正式的文件. 1.2.2 参考实现(RI) 对被提议的规范的二进制实现.参考实现有助于确保被提议的规范能以一个二进制形式实现,并为规范过程提供不断的反馈. Java EE的参考实现建立在GlassFish社区中. 1.2.3 技术兼容包(TCK) 用于验证参考实现是否符合被

《Java EE 7精粹》—— 第3章 JSF 3.1 Facelets

第3章 JSF JSF是基于Java的Web应用程序开发的服务器端用户界面(UI)框架.使用JSF可以实现: 使用遵循模型-视图-控制器(MVC)设计模式的可重用的UI组件集合来创建网页. 绑定组件到服务器端模型,允许UI与应用程序数据双向移动. 处理UI事件响应和模型交互中的页面导航. 管理跨服务器请求的UI组件状态. 提供从客户端生成的事件到服务器端应用程序代码的简单模型. 轻松地构建和重用自定义UI组件. JSF应用程序包括: 置于UI组件的布局中的一组网页. 一组托管的Bean,包括绑定

《Java EE 7精粹》—— 3.7 服务器和客户端扩展点

3.7 服务器和客户端扩展点 转换器.验证器和监听器是服务器端的附属对象,用于为页面上的组件添加更多的功能.行为是客户端的扩展点,可以使用行为定义的脚本增强组件的渲染内容. 3.7.1 转换器 转换器用于把组件中输入的数据从一种格式转换为另一种格式(例如,string到number).JSF提供了几种内置的转换器,如f:convertNumber和f:convertDateTime.他们可应用于任何可编辑的组件: 在这段代码中,文本框中输入的文本将被转换为一个整数,如果文本不能转换,则抛出一条错

《Java EE 7精粹》—— 3.3 复合组件

3.3 复合组件 JSF使用Facelets的功能和资源的处理来定义复合组件,定义在Facelets标记文件中的一个或多个JSF组件组成了一个复合组件.这个.xhtml文件存储在资源库中,可以从页面的任意区域创建一个可重用的组件. 复合组件在定义页面中定义,在使用页面中使用.定义页面使用定义元数据(或参数),使用<cc:implementation>定义实现,其中cc是http://xmlns.jcp.org/jsf/composite/命名空间的前缀.JSF规范的未来版本可能会放宽对指定元数

《Java EE 7精粹》—— 2.6 Web Fragment

2.6 Web Fragment 包含在库或框架JAR包的META-INF目录中的一个web fragment片段是部分或全部在web.xml文件中.如果这个框架绑定在WEB-INF/lib目录中,容器会选择和配置框架,而无需开发人员显示地做到这一点. Web Fragment可以包括几乎所有web.xml中指定的元素.然而,其顶级元素必须是web-fragment,并且相应的文件必须命名为webfragment.xml.这将允许Web应用程序逻辑分区: 开发人员可以指定在web.xml和web

《Java EE 7精粹》—— 2.3 事件监听器

2.3 事件监听器 事件监听器提供对ServletContext.HttpSession和ServletRequest对象生命周期的回调事件.这些监听器实现了支持上述对象状态变化事件通知的接口类.每个类可以通过@WebListener注解定义或者在web.xml中声明,抑或通过ServletContext. addListener()方法注册.一个典型的监听器例子是以编程方式注册一个额外的Servlet而没有明确要求程序员这样做,或者应用程序级别的数据库连接的初始化和恢复. 可以有多个监听器类来

《Java EE 7精粹》—— 2.10 Handling Multipart Requests

2.10 Handling Multipart Requests 可以在Servlet中定义@MultipartConfig注解,表示它期待的请求类型是multipart/form-data.HttpServletRequest.getParts()方法和HttpServletRequest.getPart()方法提供multipart请求的各个部分: 在这段代码中: @MultipartConfig注解定义在类上,表明doPost()方法将接收multipart/form-data类型的请求.

《Java EE 7精粹》—— 2.11 Upgrade Processing

2.11 Upgrade Processing HTTP 1.1(RFC 2616)第14.42节定义的升级机制,允许从HTTP 1.1过渡到一些其他的.不兼容的协议.协议变更后的应用层通信的功能和性质是完全依赖于所选择的新的协议.在客户端和服务器之间协商升级后,后续请求使用新选择的协议交换消息.一个典型的例子是RFC 6455的Opening Handshake一节中描述的如何从HTTP协议升级到WebSocket协议. Servlet容器提供了一个HTTP升级机制.然而,Servlet容器本