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