Validation 至少填写一个字段时,根据需要验证一组字段

Validation 至少填写一个字段时,根据需要验证一组字段,validation,jsf,jsf-2,primefaces,omnifaces,Validation,Jsf,Jsf 2,Primefaces,Omnifaces,在基本注册屏幕(带有按钮注册记录屏幕)中,有两个面板: 数据面板: 地址面板: 我只能通过填写数据面板进行注册。无需填写地址面板。但是,如果地址面板中至少有一个字段已填充,则同一面板中的所有其他字段都是必需的 如何实现这一点?首先,您应该向backingbean添加一个方法,如下所示: public boolean isAddressPanelRequired() { // Check if at least one field is entered // and retu

在基本注册屏幕(带有按钮注册记录屏幕)中,有两个面板:

数据面板:

地址面板:

我只能通过填写数据面板进行注册。无需填写地址面板。但是,如果地址面板中至少有一个字段已填充,则同一面板中的所有其他字段都是必需的


如何实现这一点?

首先,您应该向backingbean添加一个方法,如下所示:

public boolean isAddressPanelRequired() {
    // Check if at least one field is entered
    // and return true if it is and false othervise
}
地址面板上的每个输入元素都应该有
required=“#{backingBean.addressPanelRequired}”


然后在处理该组件的地址面板上的每个输入组件上添加onblur ajax侦听器,并更新地址面板。

如果其他输入提交了非空值,则需要选中
required
属性。由于这可能会产生相当多的样板文件,因此这里有一个仅包含3个输入组件的启动示例


另一种方法是将组件绑定到视图,并用于检查以前组件的值,以及检查它们是否有下一个组件(即按照组件树中显示的顺序处理组件)。这样,您就不需要硬编码客户端ID。您只需要确保绑定名称不会与现有托管bean名称冲突


当您拥有越来越多的组件时,您会明白这会产生难看的样板文件。JSF实用程序库中有一个验证器,用于确切的用途。另见。根据您的quesiton标记,您正在使用OmniFaces,因此您应该已经设置了以下内容:


-1感谢您没有说出您迄今为止尝试过的内容,也没有显示任何代码。