Да,
error Tag не позволяет получить «значение», предоставленное вашим пользователем - см. ссылку
Предположим, здесь идет ваш файл errors.properties (корень пути к классам) (обратите внимание, я использую только один аргумент {0})
// errors.properties
error.invalid=is not a valid {0}
При проверке вашего командного объекта вы делаете следующее
import static org.springframework.validation.ValidationUtils.*;
public boolean validate(Object command, Errors errors) {
Person person = (Person) command;
/**
* new Object [] plays the role of the supplied arguments
*/
rejectIfEmpty(errors, "age", "error.invalid", new Object[] {"Age"}, "Age is required");
/**
* If your label is a resource bundle key, use DefaultMessageSourceResolvable instead
*
* rejectIfEmpty(errors, "age", "error.invalid", new Object[] {new DefaultMessageSourceResolvable("person.age")}, "Age is required");
*/
}
UPDATE
Но для достижения цели вы должны предоставить собственный источник сообщений ( Уведомление реализует вместо extends )
public class PolicyMessageSource implements MessageSource {
private ResourceBundleMessageSource resourceBundle;
public PolicyMessageSource() {
resourceBundle = new ResourceBundleMessageSource();
/**
* Suppose your resource bundle is called messages.properties (root of the classpath)
*/
resourceBundle.setBasenames(new String[] {"messages"});
}
public String getMessage(String code, Object[] args, String defaultMessage, Locale locale) {
return resourceBundle.getMessage(code, args, defaultMessage, locale);
}
public String getMessage(String code, Object[] args, Locale locale) throws NoSuchMessageException {
return resourceBundle.getMessage(code, args, locale);
}
public String getMessage(MessageSourceResolvable resolvable, Locale locale) throws NoSuchMessageException {
if(resolvable instanceof FieldError) {
FieldError fieldError = (FieldError) resolvable;
/**
* Here goes what you want
*/
return fieldError.getRejectedValue() + resourceBundle.getMessage(resolvable, locale);
}
return resourceBundle.getMessage(resolvable, locale);
}
}
Итак, определите ваш PolicyMessageSource как messageSource
<bean id="messageSource" class="br.com.spring.PolicyMessageSource"/>
Помните, что вы должны определить только один экземпляр messageSource с именем messageSource . Обратите внимание, что вместо этого я использую ResourceBundleMessageSource . Вы должны проверить тот же подход при использовании ReloadableResourceBundleMessageSource . Имейте это в виду.