同一namespace下的tag不能定义到多个文件中,不支持模块化
<facelet-taglib>
<!-- all custom tag-->
<namespace>http://www.acca.com/validator</namespace>
<tag>
<tag-name>formCodeRangeValidator2</tag-name>
<validator>
<validator-id>formCodeRangeValidatorId2</validator-id>
</validator>
</tag>
</facelet-taglib>
慎用基于组件seam的Converter,Validator
seam允许将seam组件作为jsf Converter,Validator使用,参见满江红文档。这样不需要在faces-config.xml中配置 Converter,Validator,就可以直接使用,问题是只能创建一个实例,如果在一个页面内同时使用了多个相同的验证或转换器,那么也只有一个实例,后面的属性设置会覆盖前面的属性设置。如下所示formValidator验证实例只有一个,validateMethod的属性值是bspSysProviderAction.validate22()。
<h:inputHidden value="hiddenValidator">
<vali:formValidator validateMethod="bspSysProviderAction.validate()"/>
<vali:formValidator validateMethod="bspSysProviderAction.validate22()"/>
</h:inputHidden>
原本的jsf规范要求每次使用验证器就要创建一个验证器实例,上面的示例应该有两个formValidator实例,每个实例有自己的validateMethod属性。
如果系统中存在使用多个实例的验证、转换器就不要使用seam的Converter,Validator。
seam提供的EntityConverter(s:convertEntity)整个系统只需要一个实例即可。
hibernate验证在jsf中的错误
jsf对页面输入域的不提交和输入空值是两种不同的处理,不提交的字段获取的值是null,输入空的提交字段获取的值是空字符串,当获取值是null时就不进行验证,获取值是空字符串时还有进行requried验证。
UIInput
public void validate(FacesContext context) {
Object submittedValue = getSubmittedValue();
if (submittedValue == null) {
return;
}
hibernate验证只对null进行处理,空字符串不处理。当页面输入空字符串时jsf验证没有错误(包括jsf调用的hibernate验证),但是hibernate本身存储时执行验证会出错。
@Length
public boolean isValid(Object value) {
if ( value == null ) return true;
。。。。 }
修改办法:1)重写hibernate验证实现,增加""判断,2)在实体属性上处理,set方法中判断“”就设为null。
一个组件上支持多个验证
一个组件上支持多个验证,但只能支持一个转换器。
如下所示,可以添加一个validator属性验证器,和多个标签验证,他们按照页面内出现的顺序执行,示例中就是按如下顺序执行1)commissionTaxAction.checkBeforeSubmit 2)isss:taxTypeValidator 3)isss:dateGroupValidator
<h:inputText value="#{hiddenValidator.value}" validator="#{commissionTaxAction.checkBeforeSubmit}">
<isss:taxTypeValidator />
<isss:dateGroupValidator eleId="startDate" refId="endDate" />
</h:inputHidden>
默认情况下这些验证器都会被执行,不管是不是有验证器失败了,如果想让一个验证器失败了后就不再继续执行其他的验证器,就必须在验证器内部进行特定处理。
验证之前先判断组件Valid是不是有效,验证失败后设置Valid为失败,这样下一个验证器就不好执行了。
示例代码如下
if (!ui.isValid()) {
return;
}
if(验证失败){
ui.setValid(false);
throw new ValidatorException。。。
}
seam集成的hibernate验证问题
seam集成的hibernate验证只能在没有验证器的情况下使用,如果组件上已存在了验证器,那么hibernate验证器是加不到组件上面的,重新实现ValidateAllRendererBase的addValidators方法
private void addValidators(List children) {
for (Object child : children) {
if (child instanceof EditableValueHolder) {
EditableValueHolder evh = (EditableValueHolder) child;
// if (evh.getValidators().length == 0) {//注释的代码表示组件上没有验证器时才能添加hibernate验证
// evh.addValidator(new ModelValidator());
// }
List<Validator> vList = new ArrayList<Validator>(//修改过后的代码保证将hibernate验证加在所有验证器的前面
evh.getValidators().length + 1);
for (Validator va : evh.getValidators()) {
vList.add(va);
evh.removeValidator(va);
}
evh.addValidator(new ModelValidator());
for(Validator va : vList){
evh.addValidator(va);
}
}
addValidators(((UIComponent) child).getChildren());
}
}
分享到:
相关推荐
在JSF中,转换器和验证器是两个关键组件,它们确保了从用户输入到后台模型数据的准确无误的转换和验证。 转换器(Converter)在JSF中扮演着重要的角色,它们负责将用户界面显示的数据格式转化为模型所需的格式,...
在JSF中,转换器和验证器扮演着至关重要的角色,它们允许我们对用户输入进行处理和验证,确保数据的质量和一致性。本实例将带你深入理解如何在JSF中创建自定义的转换器和验证器。 首先,我们来了解**转换器...
在JSF中,转换器(Converter)和验证器(Validator)是两个重要的组成部分,它们在处理用户输入数据时起着至关重要的作用。 **转换器(Converter)**: 1. 转换器的主要职责是将用户界面组件的值(通常为字符串)...
- **自定义验证器:** 类似于转换器,开发者也可以创建自定义的验证器,通过实现`Validator`接口来定制更为复杂的验证规则。 #### 四、处理过程 **1. 转换器的调用时机:** - **处理验证阶段:** 在`...
MapInfo通用转换器是一款专为地图数据处理设计的工具,其主要功能是帮助用户将不同格式的地图数据进行互换和转换,以便在各种GIS(地理信息系统)软件中使用。这款软件支持多种常见的地图数据格式,如Shapefile、Geo...
### mp3转换器概述 首先,我们需要了解什么是mp3转换器。mp3转换器是一种用于将不同音频格式转换为mp3格式(或其他格式)的工具或软件。这种类型的工具在日常生活中非常实用,尤其是在处理多种音频文件格式时。它们...
总的来说,FME转换器手册为用户提供了关于FME转换器的全面概览,用户可以通过阅读本手册来了解如何使用FME Workbench,以及如何通过转换器来完成数据转换任务。无论是新手还是有经验的用户,都可以通过手册中的指导...
《信诺诚多轴NC转换器6.0:探索先进的数控编程技术》 在现代工业生产中,数控(NC)技术扮演着至关重要的角色,它极大地提升了加工精度和效率。信诺诚多轴NC转换器6.0是一款专门针对多轴加工需求而设计的软件工具,...
在JavaServer Faces (JSF)框架中,监听器和转换器是两个重要的组件,它们用于增强用户界面与后台数据处理的交互。在这个项目中,我们深入探讨了如何在JSF中有效地利用这两种机制。 首先,我们要理解JSF监听器的作用...
在处理用户表单提交的数据时,Struts2提供了一套完善的转换器(Converter)和验证(Validation)框架,使得类型转换和数据验证变得更加便捷和高效。 ### 1. Struts2 内置转换器 Struts2 自带了一系列内置转换器,...
FME2018转换器参考手册 本参考手册主要对FME Workbench、FME Data Inspector和所有转换器进行了概括总结。FME Workbench是一个强大的工具,可以进行数据转换、分享、变换、质检以及整合。Workbench中的对象是以图形...
诺诚NC转换器4.0是一款专为解决北京精雕软件生成的图形转换至NC(计算机数控)格式问题而设计的工具。在机械加工、模具制造以及雕刻行业中,NC格式被广泛用于控制CNC(计算机数控)机床进行精确的自动化加工。北京...
在MATLAB环境中,数据转换器和模拟设计验证工具是工程计算和系统建模的重要组成部分,尤其是在数字信号处理和控制系统的开发中。标题提及的“matlab开发-数据转换器与模拟设计验证工具”是一个专为Simulink设计验证...
- **参考手册内容**:涵盖FMEWorkbench使用指南、数据验证方法以及每个转换器的功能说明。 #### FMEDataInspector概览 - **功能**:用于预览源数据和检查转换后数据,也可在转换过程中任意节点检查数据状态。 - **...
4. **Rockey4ND.dll**:这通常是一个加密或授权相关的组件,用于验证软件的合法性,确保用户可以正常使用免费版本的诺诚NC转换器4.0。 5. **NCConverter.exe**:这是主程序文件,双击这个文件就可以启动诺诚NC转换...
在IT领域,偏移转换器是一种工具,主要用于处理数据或指令在内存中的位置问题。它在编程、逆向工程和安全分析中具有重要应用。偏移转换器的主要功能是将相对于某一基地址的偏移量转换为绝对地址,或者反之,帮助...
SoC(System on Chip)芯片内嵌模数转换器(ADC)的验证测试,是半导体集成电路测试领域的研究热点和难点。为了有效地进行SoC芯片内嵌模数转换器的功能性测试,研究人员提出了一套具体的测试方法论,以测量应用于...
### MP3转换器5.2概述 MP3转换器5.2是一款用于转换音频文件格式的专业工具软件。它支持将多种音频格式(如WAV、AAC、FLAC等)转换为MP3格式,同时也能够将MP3文件转换为其他格式。该软件还具备一定的视频处理能力,...
【CNC转换器(信诚)】是一款专用于CNC(计算机数字控制)系统的软件工具,主要用于处理和优化CNC程序。"精雕转换器"的名称暗示了它可能特别适用于精密雕刻作业,通过减少不必要的提刀动作来提高加工效率和工件表面质量...