Отображение метки в пользовательском валидаторе - PullRequest
2 голосов
/ 19 июня 2011

Я создал новый пользовательский компонент, реализующий пользовательский валидатор.Вот как я это называю:

<p:inputText value="#{MyBean.value}" >
    <f:attribute name="label" value="#{ResourceBean.labels['label']}"/>

    <my:validator error="#{ResourceBean.message['the.error.message']}" 
                  expression="#{ResourceBean.regExp['alphanumeric']}"/>
</p:inputText>

А вот реализация проверки

String val = value == null ? "" : value.toString();

if (!val.matches(getExpression())) {
    throw new ValidatorException(new 
              FacesMessage(FacesMessage.SEVERITY_ERROR,getErrorSummary(),null));

и сообщение об ошибке в файле свойств:

the.error.message={0}\: is Invalid.

проблема в том, что {0} не заменяется меткой в ​​сообщении об ошибке, поэтому я получаю сообщение об ошибке:

{0}: is Invalid.

Есть идеи, как это исправить?

Ответы [ 2 ]

5 голосов
/ 20 июня 2011

Вам нужно использовать MessageFormat API, как это делает JSF под прикрытием.

String message = getErrorSummary();
String label = component.getAttributes().get("label");
String formattedMessage = MessageFormat.format(message, label);
throw new ValidatorException(new FacesException(formattedMessage));
2 голосов
/ 20 июня 2011

Почему вы ожидаете другого поведения?В опубликованном коде я не вижу, где вы явно заменяете токен в подстроке {0} вашего сообщения об ошибке.

Обычно я делаю что-то вроде следующего:

String messageBody = stringBuffer.toString().replaceAll("\\{0\\}", firstName);

Или ваша строка может использовать правильный синтаксис для замены строкового токена для использования в методе формата String:

String.format("%s: is Invalid.", "token");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...