1

我希望需要 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" />
4

3 回答 3

8

几种方式。

  • 将组件绑定UIInput到视图,并在第一个的required属性中,检查第二个的提交值,在第二个的required属性中,检查第一个的值(组件即按照它们出现的顺序处理看法)。

    <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" />
    
于 2012-05-30T13:53:23.040 回答
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.valueUIComponentinputText对应的对象,而不是托管bean的值。

如果这不起作用,由于 JSF 生命周期,您可能需要替换valuesubmittedValue-UIComponent.value直到验证成功后才会设置,并且 submittedValue实际上是随表单提交发布的。

于 2012-05-30T13:24:21.993 回答
1

我认为<o:validateOneOrMore>OmniFaces 是您所需要的。另请<o:validateOneOrMore>参阅陈列柜

于 2012-05-30T12:30:48.987 回答