Проверка списка @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>
Моя проблема происходит в следующей ситуации:
- Пользователь выбирает один или несколько вариантов (Ctrl + клик здесь).
- Он отменяет выбор, который он только что выбрал.
- Он отправляет форму.
- Мы можем видеть в результате
dataList
что последнее невыбранное значение все еще находится в бине.
Насколько я понимаю ситуацию, когда пользователь отменяет выбор последнего значения, проверка не выполняется из-за аннотации @NotEmpty на поле (что подтверждается p:message
сообщение об ошибке проверки). Как следствие, сеттер не вызывается, и последнее невыбранное значение остается в компоненте.
Как я могу надлежащим образом разрешить пользователю отменить выбор всех элементов без сбоев валидации и запускать валидатор в этом поле только при отправке формы?