Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jsf 如何为复合组件中的输入组件指定验证器?_Jsf_Jsf 2_Composite Component - Fatal编程技术网

Jsf 如何为复合组件中的输入组件指定验证器?

Jsf 如何为复合组件中的输入组件指定验证器?,jsf,jsf-2,composite-component,Jsf,Jsf 2,Composite Component,如果我使用的是JSF2.0.4,我应该在faces config.xml中注册自定义验证器吗? 我的自定义验证器使用的验证器接口是javax.faces.validator.validator <cc:myComp id="customcomp1" ... /> <cc:myComp id="customcomp2" ...> <f:validator id="myvalidator" for="myComp" /> </cc:myComp&g

如果我使用的是JSF2.0.4,我应该在
faces config.xml
中注册自定义验证器吗? 我的自定义验证器使用的验证器接口是
javax.faces.validator.validator

<cc:myComp id="customcomp1" ... />

<cc:myComp id="customcomp2" ...>
    <f:validator id="myvalidator" for="myComp" />
</cc:myComp>

myComp.xhtml

<cc:interface>
    <cc:attribute ... />
    <!-- more attributes -->
</cc:interface>
<cc:implementation>
    <h:panelGroup layout="block">
        <h:inputText id="firstName" ... />
        <h:inputText id="middleName" ... />
        <h:inputText id="lastName" ... />
    </h:panelGroup>
</cc:implementation>


否。这在JSF2.0中是不必要的。只需使用
@FacesValidator
注释您的验证器即可。注释会自动注册您的验证器。不需要xml。

如果您使用的是JSF2,我认为您不需要触摸
faces config.xml
文件来创建客户
验证器。您只需使用注释
@FacesValidator
来声明
验证器
。应该是这样的:

@FacesValidator("myValidator")
public class MyValidator implements Validator {

    @Override
    public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
        // Your logic
    }

}
然后,您可以在.xhtml页面中开始使用它,例如,
标记:

<f:validator validatorId="myValidator" />

根据您更新的问题中的代码示例,您似乎根本没有将验证器委派给正确的输入,因此验证器完全被忽略

您需要在
中将所需的输入(要为其附加验证器)定义为


...
...
...
上面的
基本上说明了任何
都必须应用于
。因此,应采取以下措施:

<cc:myComp>
    <f:validator id="myValidator" for="forName" />
</cc:myComp>


您甚至可以在
name
targets
中使用相同的值,但关键是必须存在
,以便JSF知道验证器应该针对哪个输入组件,也就是说,组合中可以有多个输入组件,您知道。

由于某种原因,我的验证器无法工作。请检查editI是否与myValidator类中的上述操作完全相同,但它仍然没有被调用。@Altair:能否发布
验证程序以及复合组件的代码?应为单个输入注册
验证器,而不是为整个组件注册。您似乎正在使用自定义组件或复合组件。你需要展示你是如何创建它的。也许您只是没有正确地委托验证器。1请为您和Chichiray提供帮助。:)