Как указано в документации атрибута validator
, для этого атрибута нет способа предоставить validatorId через свойство bean:
validator: MethodExpression , представляющий метод проверки, который будет вызван
во время валидации процесса для проверки правильности значения
этого компонента. Выражение должно оцениваться для публичного метода
, который принимает параметры FacesContext, UIComponent и Object с
тип возврата void.
Обычно вы либо жестко кодируете validatorId
, как вы делали в первом примере, либо method expression
(во втором примере), который разрешает метод, подобный следующему:
public void validatorLogin(FacesContext context, UIComponent component, Object value)
throws ValidatorException {
// ...
}
Конечно, до реализации этого компонента как проверяется ввод. Если вы хотите объединить оба подхода, вы можете делегировать валидацию одному (или нескольким) валидаторам, известным по ID в вашем методе validatorLogin
:
public void validatorLogin(FacesContext context, UIComponent component, Object value)
throws ValidatorException {
final Collection<String> validatorIds = determineValidatorIds(context, component);
for (String validatorId : validatorIds) {
Validator<Object> validator = context.getApplication().createValidator(validatorId);
validator.validate(context, component, value);
}
}
private Collection<String> determineValidatorIds(FacesContext context, UIComponent component) {
// return hard coded validatorIDs or determine them on arbitrary logic.
}
Если вам срочно нужно предоставить validatorId через свойство bean-компонента, вы можете сделать это, используя тег f:validator
в компоненте ввода:
<h:inputText id="txt" value="#{myBean.textValue}">
<f:validator validatorId="#{myBean.arbitraryValidatorId}" />
</h:inputText>