Вопрос проверки шва - проверьте хотя бы одно заполненное поле - PullRequest
0 голосов
/ 27 октября 2009

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

Спасибо!

Ответы [ 4 ]

1 голос
/ 13 января 2010

Просто пусть атрибут 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 голосов
/ 28 мая 2010

Если вы используете 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>

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

0 голосов
/ 20 апреля 2010

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

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

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

if ("".equals(theFieldYouWantToCheck) || theFieldYouWantToCheck == null) {
 //Either throw exception or return "false" so that you can handle it
}
0 голосов
/ 27 октября 2009

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

  • Подтвердить в бобе после формы представить и заполнить FacesMessage для пользователя, если это не удается.
  • Добавить валидатор в одно поле и в что валидатор загружает в другой поля и проверьте их значения.
...