Пользовательское сообщение проверки JSF для одного поля ввода

Я хотел бы иметь разные сообщения проверки для каждого валидатора для разных полей ввода.

Возможно ли, чтобы в JSF были разные сообщения проверки правильности для одного валидатора (например, <f:validateLongRange>) для каждого поля ввода?

Ответ 1

Есть несколько способов:

  1. Самый простой, просто установить атрибут validatorMessage.

    <h:inputText ... validatorMessage="Please enter a number between 0 and 42">
        <f:validateLongRange minimum="0" maximum="42" />
    </h:inputText>
    

    Однако это также используется при использовании других валидаторов. Он переопределит все сообщения других валидаторов. Не уверен, что это создаст проблему. Если это так, отправляйтесь в следующие пути.

  2. Создайте пользовательский валидатор, который расширяет стандартный валидатор, такой как 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));
            }
        }
    
    }
    
  3. Используйте 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>
    

Смотрите также: