Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.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
Validation 复合材料构件的跨场验证_Validation_Jsf_Jsf 2_Composite Component - Fatal编程技术网

Validation 复合材料构件的跨场验证

Validation 复合材料构件的跨场验证,validation,jsf,jsf-2,composite-component,Validation,Jsf,Jsf 2,Composite Component,如何实现复合组件的跨域验证?我使用的复合组件是一个输入文本框,一个用于电子邮件,另一个用于确认电子邮件。我为confirmEmail组件应用了f:validator标记。如何在validate方法中获取电子邮件复合组件的值。是UIComponent还是UIamingContainer 从技术上讲,您的组合是一个UINamingcontainer,但任何组件都可以找到它的子组件 我怀疑像下面这样的方法应该有效 public void validate(FacesContext context, U

如何实现复合组件的跨域验证?我使用的复合组件是一个输入文本框,一个用于电子邮件,另一个用于确认电子邮件。我为confirmEmail组件应用了f:validator标记。如何在validate方法中获取电子邮件复合组件的值。是UIComponent还是UIamingContainer

从技术上讲,您的组合是一个UINamingcontainer,但任何组件都可以找到它的子组件

我怀疑像下面这样的方法应该有效

public void validate(FacesContext context, UIComponent component, Object value) {
    UIInput first = (UIInput)component.findComponent("compositesFirstInputID");
    UIInput second = (UIInput)component.findComponent("compositessecondInputID");

    Object firstEntry = first.getSubmittedValue();
    Object secondEntry = second.getSubmittedValue();
    if(!firstEntry.equals(secondEntry))
        throw new ValidatorException(...);
}

可能需要添加一些空检查,可能需要修剪并使用equalisgnorecase。

我已经实现了上面讨论的验证方法。我认为我的代码的问题是在复合组件上的何处使用f:validate标记

<eg:inputText id="confirmEmail" value="backingbean.email"/>

<eg:inputText id="email" value="backingbean.email">
<f:validator validatorId="core.jsf.CompareValidator" for="inputText"/>
</eg:inputText>

但是当我提交表单时,验证程序没有被调用。我应该将验证器包装在组件周围,还是这是正确的实现方法

@deepti误读了您的问题-认为您有一个包含两个输入的单一组合,并且使用页面的组合引用有一个子f:validate