Я хотел бы иметь разные сообщения проверки для каждого валидатора для разных полей ввода.
Возможно ли, чтобы в JSF были разные сообщения проверки правильности для одного валидатора (например, <f:validateLongRange>
) для каждого поля ввода?
Я хотел бы иметь разные сообщения проверки для каждого валидатора для разных полей ввода.
Возможно ли, чтобы в JSF были разные сообщения проверки правильности для одного валидатора (например, <f:validateLongRange>
) для каждого поля ввода?
Есть несколько способов:
Самый простой, просто установить атрибут validatorMessage
.
<h:inputText ... validatorMessage="Please enter a number between 0 and 42">
<f:validateLongRange minimum="0" maximum="42" />
</h:inputText>
Однако это также используется при использовании других валидаторов. Он переопределит все сообщения других валидаторов. Не уверен, что это создаст проблему. Если это так, отправляйтесь в следующие пути.
Создайте пользовательский валидатор, который расширяет стандартный валидатор, такой как LongRangeValidator
в вашем случае, перехватите исключение ValidatorException
и повторно отправьте его с нужным настраиваемым сообщением. Например
<h:inputText ...>
<f:validator validatorId="myLongRangeValidator" />
<f:attribute name="longRangeValidatorMessage" value="Please enter a number between 0 and 42" />
</h:inputText>
с
public class MyLongRangeValidator extends LongRangeValidator {
public void validate(FacesContext context, UIComponent component, Object convertedValue) throws ValidatorException {
setMinimum(0); // If necessary, obtain as custom attribute as well.
setMaximum(42); // If necessary, obtain as custom attribute as well.
try {
super.validate(context, component, convertedValue);
} catch (ValidatorException e) {
String message = (String) component.getAttributes().get("longRangeValidatorMessage");
throw new ValidatorException(new FacesMessage(message));
}
}
}
Используйте OmniFaces <o:validator>
validator <o:validator>
который позволяет установить другое сообщение валидатора для каждого валидатора:
<h:inputText ...>
<o:validator validatorId="javax.faces.Required" message="Please fill out this field" />
<o:validator validatorId="javax.faces.LongRange" minimum="0" maximum="42" message="Please enter a number between 0 and 42" />
</h:inputText>