2011-06-19 4 views
2

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

<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> 

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

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. 

Любые идеи, как исправить это?

ответ

4

Вы должны использовать 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

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

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

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

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

String.format("%s: is Invalid.", "token"); 
Смежные вопросы