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