ユーザーが同意する必要がある利用規約に必要なチェックボックスを作成しようとしています。実際にはバッキング Bean は必要ありません。ユーザーがボックスをチェックしていることを確認するだけで済みます。
私は次のことを試しましたが、うまくいかないようです:
JSF:
<p:selectBooleanCheckbox required="true"> <f:validator validatorId="RequiredCheckboxValidator" /></p:selectBooleanCheckbox>
Java コード:
@FacesValidator("RequiredCheckboxValidator")
public class RequiredCheckboxValidator implements Validator {
public void validate(FacesContext context, UIComponent component, Object value)
throws ValidatorException
{
if (value.equals(Boolean.FALSE)) {
String requiredMessage = ((UIInput) component).getRequiredMessage();
if (requiredMessage == null) {
Object label = component.getAttributes().get("label");
if (label == null || (label instanceof String && ((String) label).length() == 0)) {
label = component.getValueExpression("label");
}
if (label == null) {
label = component.getClientId(context);
}
requiredMessage = MessageFormat.format(UIInput.REQUIRED_MESSAGE_ID, label);
}
throw new ValidatorException(
new FacesMessage(FacesMessage.SEVERITY_ERROR, requiredMessage, requiredMessage));
}
}
}