При условии, что флажок "Я согласен" является последним UIInput
компонентом формы (в среднем дизайне пользовательского интерфейса это обычно так и есть!), Тогда вы можете просто сделать это:
<h:selectBooleanCheckbox ... required="#{not facesContext.validationFailed}" />
А именно, JSF обрабатывает входные компоненты сверху вниз, в том же порядке, в котором они объявлены в представлении. Когда JSF собирается обработать этот флажок, он повторно оценит атрибут required
. И в этом случае, когда нет других UIInput
компонентов над флажком вызвало ошибку проверки, тогда FacesContext#isValidationFailed()
вернет false
и, следовательно, компонент будет рассматриваться как требуется.
Но есть и другая проблема: атрибут required
для <h:selectBooleanCheckbox>
по умолчанию вообще не имеет никакого эффекта. Потому что, когда флажок снят, отправленное значение станет false
, а не null
. omnifaces.RequiredCheckboxValidator
решает эту специфическую проблему.
Итак, всего:
<h:selectBooleanCheckbox ... required="#{not facesContext.validationFailed}">
<f:validator validatorId="omnifaces.RequiredCheckboxValidator" />
</h:selectBooleanCheckbox>