2009-10-27 1 views
0

У меня есть ситуация в моей форме, что пользователь должен заполнить хотя бы одно из полей. Используя команду «required», я не могу этого сделать. Каков наилучший способ проверить это в шве? Я не хочу использовать javascript.Вопрос проверки шва - проверьте хотя бы одно заполненное поле

Спасибо!

ответ

0

JSF2 позволит вам выполнить проверку на уровне формы. На данный момент, вы должны будете сделать с любой:

  • Validate в Bean после представления формы и заполнить FacesMessage пользователю, если он выходит из строя.
  • Добавить валидатор в одно поле и в , чтобы данные валидатора загрузили другие поля и проверьте их значения.
1

Только пусть атрибут required зависит от его результата от наличия других полей ввода в карте параметров запроса.

<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> 

В качестве альтернативы можно также использовать компоненты связывания и использовать UIInput#getValue() для проверки значения предыдущих компонентов и UIInput#getSubmittedValue(), чтобы проверить их на еще-быть апробированы компоненты (компоненты обрабатываются в порядке, как они появляются в дереве компонентов). Таким образом, вам не нужно жестко кодировать идентификаторы клиентов. Вам нужно только убедиться, что имена привязок не конфликтуют с существующими именами управляемых компонентов.

<h:form> 
    <h:inputText binding="#{input1}" required="#{empty input2.submittedValue and empty input3.submittedValue}" /> 
    <h:inputText binding="#{input2}" required="#{empty input1.value and empty input3.submittedValue}" /> 
    <h:inputText binding="#{input3}" required="#{empty input1.value and empty input2.value}" /> 
</h:form> 
0

Если вы не хотите использовать требуемый атрибут или javascript, то есть два пути.

Один из них создает валидатор, но, на мой взгляд, это слишком перебор.

Я бы просто проверил, является ли вход пустым или пустым в вашем компоненте.

if ("".equals(theFieldYouWantToCheck) || theFieldYouWantToCheck == null) { 
//Either throw exception or return "false" so that you can handle it 
} 
0

Если вы используете RichFaces, то вы можете выполнить проверку следующим образом (см http://mkblog.exadel.com/ria/richfaces-ria/richfaces-built-in-client-functions/):

<h:form id="form"> 
    <h:inputText id="input1" value="#{bean.input1}" /> 
    <h:inputText id="input2" value="#{bean.input2}" 
     required="#{empty rich:findComponent('input1').submittedValue}" 
     requiredMessage="At least one of the fields input1 and input2 must be filled."/> 
</h:form> 

Обратите внимание, что выражение богатых: FindComponent ('input1') эквивалентно UIComponent [» input1' ]. Причина в том, что Seam предоставляет динамическую карту uiComponent для поиска компонентов пользовательского интерфейса.