У меня есть форма в JSF2 с 2 флажками (<h:selectBooleanCheckbox>
). По крайней мере, один из них должен быть проверен. Обе проверенные тоже в порядке, но когда ни одна не отмечена, должна быть ошибка.
Эта проверка должна работать и на ajax, т. Е. Когда пользователь проверяет / снимает флажок, сообщение об ошибке должно исчезать / появляться.
Итак, я связал оба флажка с UISelectBoolean
элементами и добавил валидатор к каждому. В валидаторе я проверяю значение второго флажка, если оно ложно, и текущий флажок также установлен в ложь, выдается сообщение об ошибке. Что-то вроде:
if (newValue == false && secondCheckbox.getValue() == false) {
throw new ValidationException();
}
Проблема в том, что когда пользователь снимает флажок на странице, в то время как другой также не отмечен, это ложное значение не передается модели или событию UISelectBoolean.
Сценарий:
- Первоначально оба не проверены
- Пользователь проверяет флажок1.
newValue
равно true
, так что это действительно, идет к UISelectBoolean и модели.
- Пользователь снимает флажок1. Флажок2 равен
false
, newValue
равен false
, поэтому создается исключение.
Из-за неудачной проверки это значение false
не относится ни к модели, ни даже к элементу UISelectBoolean.
- Пользователь проверяет флажок2.
True
значение отправляется в модель и UISelectBoolean.
- Пользователь снимает флажок2. Checkbox1 все еще не отмечен на странице, но в модели и UISelectBoolean все еще есть
true
. Таким образом, проверка проходит, и сообщения об ошибках нет. На странице оба флажка сняты, но в модели флажок1 по-прежнему true
.
Как решить такую проблему?