《Java EE 7精粹》—— 3.5 Ajax

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

本节书摘来异步社区《Java EE 7精粹》一书中的第3章,第3.5节,作者:【美】Arun Gupta,更多章节内容可以访问云栖社区“异步社区”公众号查看。

3.5 Ajax

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

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

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

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

316b96325b700b8a8f1129c4cac8141a6a755fd5

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

a9baea6634570c79f03c2ff97dc0d69b93561f41

在这段代码中:

  • 前两个输入文本字段接受用户名和密码,第三个输出字段显示状态(用户是否已登录)。
  • 表单的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)属性的取值。

af8811456ae6459c0752a261e173253ff6afda6e

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

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

175b13196946b5dde117027d757ab97678b2144c

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

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

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

1640b0fa20fa2d9dfccb18e073707ab14cc8e2df

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

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

52dcf007b61d6ca0c232c22d05e47df0509a2e1c

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

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

5be826c65f6057497815882752fb64980d5f76a2

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

c0b238bf2eb01868bdc5199291bd4344eab95c98

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

相关文章
|
6月前
|
安全 Java API
Java SE 与 Java EE 区别解析及应用场景对比
在Java编程世界中,Java SE(Java Standard Edition)和Java EE(Java Enterprise Edition)是两个重要的平台版本,它们各自有着独特的定位和应用场景。理解它们之间的差异,对于开发者选择合适的技术栈进行项目开发至关重要。
1113 1
|
9月前
|
设计模式 算法 Java
Java SE 与 Java EE 组件封装使用方法及实践指南
本指南详细介绍了Java SE与Java EE的核心技术使用方法及组件封装策略。涵盖集合框架、文件操作、Servlet、JPA、EJB和RESTful API的使用示例,提供通用工具类与基础组件封装建议,如集合工具类、文件工具类、基础Servlet、实体基类和服务基类等。同时,通过分层架构集成示例展示Servlet、EJB和JPA的协同工作,并总结组件封装的最佳实践,包括单一职责原则、接口抽象、依赖注入、事务管理和异常处理等。适合希望提升代码可维护性和扩展性的开发者参考。
305 0
|
前端开发 Java 数据库连接
你不可不知道的JAVA EE 框架有哪些?
本文介绍了框架的基本概念及其在编程领域的应用,强调了软件框架作为通用、可复用的软件环境的重要性。文章分析了早期Java EE开发中使用JSP+Servlet技术的弊端,包括可维护性差和代码重用性低等问题,并阐述了使用框架的优势,如提高开发效率、增强代码规范性和可维护性及提升软件性能。最后,文中详细描述了几种主流的Java EE框架,包括Spring、Spring MVC、MyBatis、Hibernate和Struts 2,这些框架通过提供强大的功能和支持,显著提升了Java EE应用的开发效率和稳定性。
989 1
|
存储 缓存 前端开发
JavaEE初阶——初识EE(Java诞生背景,CPU详解)
带你从零入门JAVAEE初阶,Java的发展历程认识什么是cpu,cpu的工作原理,cpu是如何进行计算的,cpu的架构,指令集,cpu的核心,如何提升cpu的算力,cpu的指令,,cup的缓存,cpu的流水线
|
Java 数据库连接 API
Spring 框架的介绍(Java EE 学习笔记02)
Spring是一个由Rod Johnson开发的轻量级Java SE/EE一站式开源框架,旨在解决Java EE应用中的多种问题。它采用非侵入式设计,通过IoC和AOP技术简化了Java应用的开发流程,降低了组件间的耦合度,支持事务管理和多种框架的无缝集成,极大提升了开发效率和代码质量。Spring 5引入了响应式编程等新特性,进一步增强了框架的功能性和灵活性。
334 0
|
前端开发 JavaScript Java
Ajax进行异步交互:提升Java Web应用的用户体验
Ajax 技术允许在不重载整个页面的情况下与服务器异步交换数据,通过局部更新页面内容,极大提升了 Java Web 应用的响应速度和用户体验。本文介绍 Ajax 的基本原理及其实现方式,包括使用 XMLHttpRequest 对象发送请求、处理响应数据,并在 Java Web 应用中集成 Ajax。此外,还探讨了 Ajax 如何通过减少页面刷新、实时数据更新等功能改善用户体验。
274 3
|
设计模式 监控 安全
屏幕监控软件的设计模式:深入理解Java EE
在Java EE环境中,屏幕监控软件采用生产者-消费者设计模式,`ScreenCaptureProducer`类捕获屏幕数据并放入队列,`ScreenCaptureConsumer`负责处理和提交。数据每5分钟通过定时任务和RESTful API自动提交至网站,提升管理效率。该方案支持实时监控、数据分析和高效的数据处理。
289 2
|
存储 Java 对象存储
<Java EE 进阶> 3.Spring简单的读和取
<Java EE 进阶> 3.Spring简单的读和取
154 1
|
存储 Java Linux
【Java EE】 文件IO的使用以及流操作
【Java EE】 文件IO的使用以及流操作
205 3
|
存储 安全 Java
【Java EE】CAS原理和实现以及JUC中常见的类的使用
【Java EE】CAS原理和实现以及JUC中常见的类的使用
276 3