我认为需要2个imputText:如果重视电子邮件,则不需要手机,反之亦然。 我该怎么办?
感谢。
<h:inputText required="true" id="usEmail" size="20"
value="#{rwUser.usEmail}" />
<h:message for="usEmail" style="color:red" />
<h:outputText value="#{msg.mobilephone}" styleClass="textMessage" />
<h:inputText id="usMobilephone" size="20"
value="#{rwUser.usMobilephone}" />
<h:message for="usMobilephone" style="color:red" />
答案 0 :(得分:8)
有几种方式。
将UIInput
组件绑定到视图和第一个组件的必需属性中,检查第二个组件的提交值以及第二个组件的必需属性,检查第一个组件的值(组件)即按照它们出现在视图中的顺序进行处理。
<h:inputText binding="#{usEmail}" ... required="#{empty usMobilePhone.submittedValue}" />
<h:inputText binding="#{usMobilePhone}" ... required="#{empty usEmail.value}" />
检查请求参数映射中是否存在提交的值。
<h:inputText binding="#{usEmail}" ... required="#{empty param[usMobilePhone.clientId]}" />
<h:inputText binding="#{usMobilePhone}" ... required="#{empty param[usEmail.clientId]}" />
或使用硬编码的客户端ID:
<h:form id="form">
<h:inputText id="usEmail" ... required="#{empty param['form:usMobilePhone']}" />
<h:inputText id="usMobilePhone" ... required="#{empty param['form:usEmail']}" />
使用OmniFaces <o:validateOneOrMore>
。
<h:inputText id="usEmail" ... />
<h:inputText id="usMobilePhone" ... />
<o:validateOneOrMore components="usEmail usMobilePhone" showMessageFor="@all" />
答案 1 :(得分:1)
我认为OmniFaces的<o:validateOneOrMore>
就是您所需要的。另请参阅the <o:validateOneOrMore>
showcase。
答案 2 :(得分:1)
您还可以使用binding
从一个组件到另一个组件的引用:
<h:inputText required="true" id="usEmail" binding="usEmail"
size="20" value="#{rwUser.usEmail}" required="#{empty usMobilePhone.value}" />
<h:inputText id="usMobilephone" size="20" value="#{rwUser.usMobilephone}"
binding="usMobilePhone" required="#{empty usEmail.value}"/>
请注意,usEmail.value
引用与inputText对应的UIComponent
对象,而不是托管bean值。
如果这不起作用,您可能需要将value
替换为submittedValue
,因为JSF生命周期 - UIComponent.value
在验证成功后才会设置{{1}实际上是通过表单提交发布的。