Проверка списка @NotEmpty

У меня есть компонент JSF, который отображается в список в соответствующем компоненте. Поскольку я хочу, чтобы отображаемое поле содержало хотя бы одно значение при отправке формы, это поле помечается как @NotEmpty.

Боб:

public class MyBean {

    @NotEmpty(message="Validation failed")
    private List<String> selectedOptions = new ArrayList<>();

    ... getter & setter

}

Каждый раз, когда пользователь выбирает что-то в моем компоненте, я хочу, чтобы выборка немедленно отображалась в компоненте, поэтому я добавляю поведение ajax к компоненту (Здесь компонент является p:selectManyMenu но проблема, кажется, присутствует с любым компонентом, сопоставленным со списком):

XHTML:

<h:form>
    <p:outputLabel for="optionslist" value="Options :" />
    <p:selectManyMenu id="optionslist" value="#{myBean.selectedOptions}" style="margin-bottom:50px">
        <f:selectItem itemLabel="Option 1" itemValue="1" />
        <f:selectItem itemLabel="Option 2" itemValue="2" />
        <f:selectItem itemLabel="Option 3" itemValue="3" />
        <p:ajax process="@this" update="result optionsListMessage" /> 
    </p:selectManyMenu>

    <p:commandButton value="Submit" update="result optionsListMessage" />

    <p:message for="optionslist" id="optionsListMessage" />

    <p:dataList id="result" value="#{myBean.selectedOptions}" var="option">
        <h:outputText value="#{option}" />
    </p:dataList>
</h:form>

Моя проблема происходит в следующей ситуации:

  1. Пользователь выбирает один или несколько вариантов (Ctrl + клик здесь).
  2. Он отменяет выбор, который он только что выбрал.
  3. Он отправляет форму.
  4. Мы можем видеть в результате dataList что последнее невыбранное значение все еще находится в бине.

Насколько я понимаю ситуацию, когда пользователь отменяет выбор последнего значения, проверка не выполняется из-за аннотации @NotEmpty на поле (что подтверждается p:message сообщение об ошибке проверки). Как следствие, сеттер не вызывается, и последнее невыбранное значение остается в компоненте.

Как я могу надлежащим образом разрешить пользователю отменить выбор всех элементов без сбоев валидации и запускать валидатор в этом поле только при отправке формы?

0 ответов

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