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

3.7 服务器和客户端扩展点

转换器、验证器和监听器是服务器端的附属对象,用于为页面上的组件添加更多的功能。行为是客户端的扩展点,可以使用行为定义的脚本增强组件的渲染内容。

3.7.1 转换器

转换器用于把组件中输入的数据从一种格式转换为另一种格式(例如,string到number)。JSF提供了几种内置的转换器,如f:convertNumber和f:convertDateTime。他们可应用于任何可编辑的组件:

在这段代码中,文本框中输入的文本将被转换为一个整数,如果文本不能转换,则抛出一条错误信息。

可以很容易地创建自定义的转换器:

在这段代码中,方法getAsObject和getAsString用于执行模型数据对象和适于页面渲染表述的字符串对象之间的,对象到字符串和字符串到对象的转换。这个POJO实现了Converter接口,同时还标有@FacesConverter注解。这样的转换器就可以在JSF页面中使用:

@FacesConverter的value属性值一定要和converterId属性值匹配。

3.7.2 校验器

校验器用于验证输入组件接收的数据。JSF提供了几种内置的验证器,如f:validateLength和f:validateDoubleRange。这些验证器可应用于任何可编辑的组件:

<h:inputText value="#{user.name}" id="name">
  <f:validateLength minimum="1" maximum="10"/>
</h:inputText>```
在这段代码中,输入的文本长度验证为1到10个字符之间。

如果长度超出规定的范围,抛出一条错误消息。

可以很容易地创建自定义的验证器:
<div style="text-align: center"><img src="https://yqfile.alicdn.com/2d33686f8a4e2c9809d378704944cd16f22c7464.png" width="" height="">
</div>

在这段代码中,如果待验证的值验证成功,方法返回。否则,抛出异常ValidatorException。这个验证器可以应用于任何可编辑的组件:
<div style="text-align: center"><img src="https://yqfile.alicdn.com/de12720f028827300865fbc70c052941d3e83b3e.png" width="" height="">
</div>

@FacesValidator的value属性值一定要匹配这里的f:validator的id属性值。

JSF还提供了对Bean验证(Bean Validation)定义的约束的内置集成。除了在Bean中放置约束注解,没有额外的工作需要开发人员来做,因为违反约束的错误信息会自动转换成FacesMessage并显示给最终用户。当验证特定组件时,f:validateBean可以指定validationGroups以指示哪个验证组应被考虑在内。这将在第11章中进行详细说明。

####3.7.3 监听器
监听器用于监听组件上的事件。事件可以是值发生变化、按钮被点击、链接被点击,或者发生了其他情况。监听器可以是托管Bean的方法或是Bean类本身。

ValueChangeListener可以注册到任何可编辑的组件上:
<div style="text-align: center"><img src="https://yqfile.alicdn.com/50cb51c97674a4619a7341571371f1ec9387121d.png" width="" height="">
</div>

在这段代码中,相关的表单提交时,User类中的nameUpdated方法被调用。可以通过实现ValueChangeListener接口创建一个类级别的监听器,然后使用f:valueChangeListener标签在页面中指定该监听器。

####3.7.4 行为
与转换器、验证器和监听器不同,行为用于增强其客户端功能,通过为组件声明附属脚本来实现。例如,f:ajax定义为一个客户端行为。客户端行为还允许执行客户端验证、客户端日志记录、显示工具提示,以及其他类似的功能。
时间: 2024-09-19 20:12:57

《Java EE 7精粹》—— 3.7 服务器和客户端扩展点的相关文章

《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 Eclipse下配置Tomcat服务器

在进行Java web编程之前,必须要进行web服务器的配置,这里选择在Java EE(版本) Eclipse中进行服务器的配置.当然了,在安装Java EE Eclipse之前要先安装JDK,并且要在环境变量中配置好JDK的安装目录,在这里不再多说,如果不清楚,可以看前面写的一篇"在win7下面安装JDK(以32位系统为例)"的文章.这里就假设你已经安装好了JDK,并且已经配置好环境变量.      Java EE Eclipse可以去Eclipse公司的网页上去下载最新版本的,但是

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

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

如何把在win下用eclipse建立的java ee项目传送到linux服务器下编译并部署?

问题描述 我在windows下部署了jdk和tomcat,开发完项目后,要部署到linux下,linux下已经安装了同样版本的jdk和tomcat,目前,我把在win下发布到tomcat的webapp目录下的项目直接拷贝到linux下tomcat的webapp目录是可以运行的,不过它不是在linux下编译的,不知道会不会有问题.我希望找到一个方法,能够简单的把整个项目源代码和文件复制到linux下完成编译并部署 解决方案 一般只要jdk版本一致,在win下编译即可.你可以把源码提交到SVN或其他

Apache发布支持Java EE微服务的Meecrowave服务器

Apache OpenWebBeans团队希望通过使服务器适应用户来消除复杂性.所以,该团队发布了Apache Meecrowave项目1.0版. Apache Meecrowave是一款小型服务器,非常适合微服务和独立服务.Apache OpenWebBeans表示, "Apache Meecrowave是一个基于Apache OpenWebBeans,Tomcat,CXF和Johnzon的微型服务器.换句话说,它包含了所有你需要从命令行运行基于JavaEE的微服务,而且只有9 MB.&quo

《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.可以在页面中使用output

《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容器本

《Java EE 7精粹》—— 2.5 非阻塞I/O

2.5 非阻塞I/O Servlet 3.0允许异步请求处理,但只允许传统的I/O,这限制了应用程序的可扩展性.在典型应用中,在while循环中读取ServletInputStream: 如果传入的数据被阻塞或者数据流慢于服务器的读取,那么服务器线程就要等待数据.如果数据被写入到ServletOutputStream,同样也可能发生这样的等待.这限制了Web容器的可扩展性. 非阻塞I/O允许开发人员在有可读的数据时执行读操作或者在有写入的数据时执行写操作.这不仅增加了Web容器可伸缩性,也增加了