2012-05-30 6 views
1

Я бы хотел, чтобы 2 imputText были необходимы: если электронная почта оценена, мобильный телефон не требуется, и наоборот. Как я могу это сделать?JSF два требуемых h: inputText (эксклюзивный или)

Спасибо.

   <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

Я предполагаю, что вы хотите что-то вроде, если есть значение по электронной почте, то пользователь не может ввести телефон нет. Это правильно??? Или он может набрать номер телефона, но это не обязательно. ??? – Addicted

+0

@Abhinav Я думаю, он хочет, чтобы хотя бы один из двух был заполнен – perissf

ответ

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 относится к UIComponent объекту, соответствующего inputText, не управляемому значение компоненты.

Если это не работает, вам, возможно, придется заменить value с submittedValue из жизненного цикла JSF - UIComponent.value не получает установлен только после валидации успеха, и submittedValue является то, что на самом деле было размещено с подчиненной формой.

7

Несколько способов.

  • Свяжите 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]}" /> 
    

    Или с жестко закодированные идентификаторы клиентов:

    <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 фантастический сэр ... – Addicted

Смежные вопросы