JSF两个需要h:inputText(独占或)

时间:2012-05-30 10:10:49

标签: java jsf

我认为需要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" />

3 个答案:

答案 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}实际上是通过表单提交发布的。