Получить пустые строки изпройти проверку - PullRequest
4 голосов
/ 10 марта 2011

Есть ли способ заставить валидатор jsf обрабатывать пустые строки? У меня есть собственный валидатор для всех inputTexts. Вместо того, чтобы реализовывать тег «required», я бы хотел, чтобы обработчик клиента обрабатывал пустые строки и определял в компоненте поддержки, является ли это поле обязательным или нет.

<h:inputText id="SSID_STR" styleClass="propertyInput" value="#{wifiDM.SSIDStr}" validator="#{wifiDM.validate}" >
    <h:message for="SSID_STR" fatalClass="mandatoryFieldMissing" tooltip="true" />
</h:inputText>

Если бы мне пришлось добавить обязательный тег, я бы делал это для каждого входного текста в моем приложении:

<h:inputText id="SSID_STR" styleClass="propertyInput" value="#{wifiDM.SSIDStr}" validator="#{wifiDM.validate}" required="#{wifiDM.isRequired} requiredMessage="*">
    <h:message for="SSID_STR" fatalClass="mandatoryFieldMissing" tooltip="true" />
    <f:attribute name="InputID" value="SSID_STR">
</h:inputText>

что беспорядок ...


Обновление (уточнение) Прежде всего, используя JSF 1.2. Каждое поле является независимым в том смысле, что оно является обязательным или нет, поэтому проблема зависимости компонентов не имеет значения. Моя цель состояла в том, чтобы передать нулевое значение через валидатор, чтобы мне не нужно было добавлять оба тега в inputText.

Кроме того, обработчик Validator получает 'component' в качестве параметра, что означает, что я могу получить его идентификатор и посмотреть в в режиме реального времени , если это требуется. (Не всегда требуется один и тот же компонент).

Если я использую required="#{bean.requireCheck}" (например), могу ли я каким-то образом получить компонент, из которого он был вызван?

1 Ответ

6 голосов
/ 10 марта 2011

JSF 1.x по умолчанию не запускает валидаторы на пустых полях. Для этого необходимо использовать атрибут required. Если ваша конкретная проблема заключается в том, что второе поле должно быть установлено required всякий раз, когда первое поле заполнено, то вам просто нужно проверить это в атрибуте required.

<h:inputText value="#{bean.input1}" binding="#{input1}" />
<h:inputText value="#{bean.input2}" required="#{not empty input1.value}" />

Если это не функциональное требование, то вам следует уточнить это больше в вопросе, чтобы можно было дать более подходящий ответ.


Обновление : То есть вы хотите управлять потребностью модели? Добавьте Map<String, Boolean> к компоненту следующим образом:

private Map<String, Boolean> required;

public Bean() {
    required = new HashMap<String, Boolean>();
    required.put("foo", true);
    required.put("bar", false); // false entries are by the way not necessary.
    // ...
}

public Map<String, Boolean> getRequired() {
    return required;
}

Используйте его следующим образом:

<h:inputText id="foo" required="#{bean.required['foo']}" />
<h:inputText id="bar" required="#{bean.required['bar']}" />

Если бы вы использовали JSF 2.0, вы могли бы сделать это следующим образом

<h:inputText id="foo" required="#{bean.required[component.id]}" />
<h:inputText id="bar" required="#{bean.required[component.id]}" />

Вне зависимости от конкретной проблемы, ставить <h:message> как дочерний элемент <h:inputText> незаконно. Положите их рядом друг с другом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...