【发布时间】:2017-08-23 16:59:46
【问题描述】:
我正在尝试执行一个搜索功能,其中我有多个字段,并且至少需要其中一个或一组。
我在 StackOverflow 上找到的唯一答案是这个:How to validate if at least one of multiple input fields is entered?
那里有两种解决方案:一种使用Omnifaces(由于项目要求我不能使用),另一种不优雅,因为当字段数量很大时它会增长很多。
例如,我有这些字段:
<p:selectOneMenu value="#{backingBean.type}"id="type">
<f:selectItem itemLabel="#{constantsController.SELECT_TYPE_HEADER}"
itemDisabled="true" />
<f:selectItems
value="#{constantsController.getTypes().entrySet()}"
var="entry" itemValue="#{entry.key}" itemLabel="#{entry.value}" />
</p:selectOneMenu>
<p:inputText id="number" value="#{backingBean.number}"/>
<p:inputText id="year" value="#{backingBean.year}"/>
<p:inputText id="number2" value="#{backingBean.number2 }"/>
<p:selectOneMenu value="#{backingBean.state}"
id="state" filter="true" filterMatchMode="startsWith">
<f:selectItem itemLabel="Choose its state" disabled="true" />
<f:selectItems value="#{constantsController.getStates().entrySet()}"
var="entry" itemValue="#{entry.key}" itemLabel="#{entry.value}" />
</p:selectOneMenu>
<p:selectOneMenu id="entity"
value="#{backingBean.entity }">
<f:selectItem itemLabel="Select entity"
itemDisabled="true" />
<f:selectItem itemLabel="Entity1" itemValue="1"></f:selectItem>
<f:selectItem itemLabel="Entity2" itemValue="2"></f:selectItem>
</p:selectOneMenu>
<p:selectOneMenu id="documentType"
value="#{backingBean.documentType}">
<f:selectItems
value="#{constantsController.getDocumentTypes().entrySet()}"
var="entry" itemValue="#{entry.key}" itemLabel="#{entry.value}" />
</p:selectOneMenu>
<p:inputText id="documentNumber" value="#{backingBean.documentNumber}"/>
如您所见,我有多个字段。并且要求规定我需要以下要求之一(我会写 id's):
1-类型+数字+年份
2- number2 + 状态
3-实体
4- 文档类型 + 文档编号
所以当我单击命令按钮时,我需要它来检查这些组(1、2、3 或 4)中的一个是否已填充。
另外,groups本身也是需要的,比如我已经填了entity,也填了year,不能让我前进,因为year需要伴随着type和'号”。
【问题讨论】:
-
您可以在 Java(服务器端)中检查所需的字段/组,而不是在客户端
-
是的,这就是我最后的解决方案。感谢您的帮助。
标签: validation jsf