Alf*_*lle 4 validation jsf primefaces jsf-2 omnifaces
在基本注册屏幕(带有按钮注册记录屏幕)中,有两个面板:
数据面板:

地址面板:

我只能通过完成“数据”面板进行注册。不必填写“地址”面板。但是,如果填写了“地址”面板的至少一个字段,则应要求同一面板中的所有其他字段。

我该如何实现?
您需要检入required属性,如果其他输入提交了非空值。由于这会导致很多样板,因此这里有一个仅包含3个输入组件的启动示例。
<h:form id="form">
<h:inputText id="input1" value="#{bean.input1}" required="#{empty param['form:input2'] and empty param['form:input3']}" />
<h:inputText id="input2" value="#{bean.input2}" required="#{empty param['form:input1'] and empty param['form:input3']}" />
<h:inputText id="input3" value="#{bean.input3}" required="#{empty param['form:input1'] and empty param['form:input2']}" />
</h:form>
Run Code Online (Sandbox Code Playgroud)
一种替代方法是将组件绑定到视图,并用于UIInput#getValue()检查先前组件的值并UIInput#getSubmittedValue()检查它们是否包含下一个组件(即按照组件在组件树中的显示顺序对其进行处理)。这样,您无需对客户端ID进行硬编码。您只需要确保绑定名称不与现有托管Bean名称冲突即可。
<h:inputText binding="#{input1}" value="#{bean.input1}" required="#{empty input2.submittedValue and empty input3.submittedValue}" />
<h:inputText binding="#{input2}" value="#{bean.input2}" required="#{empty input1.value and empty input3.submittedValue}" />
<h:inputText binding="#{input3}" value="#{bean.input3}" required="#{empty input1.value and empty input2.value}" />
Run Code Online (Sandbox Code Playgroud)
您将了解,当您拥有越来越多的组件时,这会产生难看的样板。JSF实用程序库OmniFaces具有<o:validateAllOrNone>用于特定用途的验证器。另请参见现场演示。根据您的问题标签,您正在使用OmniFaces,因此您应该已经设置好了:
<o:validateAllOrNone components="input1 input2 input3" />
<h:inputText id="input1" value="#{bean.input1}" />
<h:inputText id="input2" value="#{bean.input2}" />
<h:inputText id="input3" value="#{bean.input3}" />
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4409 次 |
| 最近记录: |