Почему сообщение проверки не отображается для компонента selectOneMenu (JSF 2)?

Я использую этот класс для проверки из полей ввода:

@ManagedBean
@RequestScoped
public class UserInputValidation {

    public void validateCity(FacesContext context, UIComponent validate,
            Object value) {
        String inputFromField = (String) value;     

        if (inputFromField.equals("") || inputFromField.equals(" ")) {
            FacesMessage msg = new FacesMessage("Odaberite grad");
            throw new ValidatorException(msg);
        }
    }
//...
}

И это управляемый компонент, который содержит введенные значения:

@ManagedBean
@RequestScoped
public class InputController {

    //Attributes
    private String city;
   //Get set methods

Почему, когда я создаю selectOneComponent и выбираю первый компонент (пустой ввод), сообщение проверки не отображается?

<h:selectOneMenu id="city" value="#{inputController .city}">                
                <f:selectItems value="#{searchController.formatedCities()}" validator="#{userInputValidation.validateCity}"/>
            </h:selectOneMenu>
            <span style="color: red;"><b><h:message for="city"
                    showDetail="true" /></b></span>

Первое из полей в selectOneMenu - пустое (FormatedCitiesMethod() возвращает "" в качестве первого элемента), так почему же сообщение о проверке не отображается, если кнопка отправки формы нажата с выбранным пробелом?

1 ответ

Решение

validator атрибут должен идти в <h:selectOneMenu>не в <f:selectItems>

Сказал, что почему бы вам просто не использовать required="true"? Почему валидатор @ManagedBean вместо @FacesValidator?

Другие вопросы по тегам