复合材料部件的跨场验证

发布于 2024-10-24 08:57:38 字数 152 浏览 1 评论 0原文

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

How do I implement cross-field validation for composite components? The composite component I am using is an input text box (one for email and the second one for confirm email). I applied f:validator tag for the confirmEmail component. How to obtain the value for email composite component in the validate method. Is it UIComponent or UINamingContainer?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

愿得七秒忆 2024-10-31 08:57:38

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

我怀疑像下面这样的东西应该可以工作

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(...);
}

可能需要添加一些空检查,可能是trim()并使用equlasIgnoreCase。

Technically, your composite is a UINamingcontainer, but any component can find its children.

I suspect something like the following should work

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(...);
}

Might want to add some null checking, possibly trim() and use equlasIgnoreCase.

狼亦尘 2024-10-31 08:57:38

我已经实现了上面讨论的验证方法。我认为我的代码的问题是在复合组件上使用 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>

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

I have implemented the validate method as discussed above. I think the problem with my code is where to use the f:validate tag on composite component.

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

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

But when I submit the form the validator is not being called. Should I wrap the validator around the component or is this the correct way of implementing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文