В настоящее время я пытаюсь предоставить пользовательское сообщение проверки, используя проверку bean-компонента.
В настоящее время используется проверка spring mvc 3.1.1 + apache bean.
В своем bean-компоненте я указываю:
@Size(min=1, max=50)
private String title;
И в своих messages.properties:
Size.addForm.title=The title must not be empty and must not exceed {1} characters.
Из эксперимента я узнал, что:
, и он будет отображаться как The title must not be empty and must not exceed 50 characters.
, что правильно.
Но все это из экспериментов. Интересно , существует ли документация, указывающая порядок параметров для ограничений по умолчанию ?
Надеюсь, я попытался использовать Size.addForm.title=The title must not be empty and must not exceed {max} characters.
на основе ValidationMessages.properties по умолчанию, но в итоге получил NumberFormatException на {max}
. Я думаю, это как-то связано с интерполяцией?
Таким образом, каждый из них независимо завершается с ошибкой NumberFormatException в{max}
:
Это трассировка стека.:
java.lang.NumberFormatException: For input string: "max"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.text.MessageFormat.makeFormat(Unknown Source)
at java.text.MessageFormat.applyPattern(Unknown Source)
at java.text.MessageFormat.<init>(Unknown Source)
at org.springframework.context.support.MessageSourceSupport.createMessageFormat(MessageSourceSupport.java:151)
at org.springframework.context.support.ResourceBundleMessageSource.getMessageFormat(ResourceBundleMessageSource.java:281)
at org.springframework.context.support.ResourceBundleMessageSource.resolveCode(ResourceBundleMessageSource.java:188)
at org.springframework.context.support.AbstractMessageSource.getMessageInternal(AbstractMessageSource.java:205)
at org.springframework.context.support.AbstractMessageSource.getMessage(AbstractMessageSource.java:146)
at org.springframework.context.support.AbstractApplicationContext.getMessage(AbstractApplicationContext.java:1214)
at org.springframework.web.servlet.support.RequestContext.getMessage(RequestContext.java:571)
at org.springframework.web.servlet.support.BindStatus.initErrorMessages(BindStatus.java:177)
at org.springframework.web.servlet.support.BindStatus.getErrorMessages(BindStatus.java:273)
at org.springframework.web.servlet.tags.form.ErrorsTag.exposeAttributes(ErrorsTag.java:173)
at org.springframework.web.servlet.tags.form.AbstractHtmlElementBodyTag.writeTagContent(AbstractHtmlElementBodyTag.java:48)
at org.springframework.web.servlet.tags.form.AbstractFormTag.doStartTagInternal(AbstractFormTag.java:102)
at org.springframework.web.servlet.tags.RequestContextAwareTag.doStartTag(RequestContextAwareTag.java:79)
Это единственный параметр, который работает с именованным параметром. Это должен быть ValidationMessages.properties, и это должен быть именно тот ключ, который существует в пакете ресурсов по умолчанию для реализация jsr 303:
По сути, текущий вывод: по умолчанию я не могу использовать именованные параметры в своих конкретных сообщениях. Именованный параметр работает только , когда я переопределяю точный ключ в пакете ресурсов jsr303 по умолчанию && , когда я использую то же имя файла пакета ресурсов jsr303 по умолчанию, которое ValidationMessages.properties
Я предпочитаю пока не играть с интерполяцией, поэтому исходный вопрос о том, как узнать, что {0}, {1} или {2} относится к тому, что указано в документации.