我目前正在提供使用Bean验证自定义验证消息。
目前在使用Spring MVC 3.1.1 + apache的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.
从实验中,我发现:
- {0}是指“标题”
- {1}是指最大,这是50
- {2}是指分钟,为1
它会显示为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}
- messages.properties:Size.addForm.title =标题不能为空,且不得超过{max}个字符。
- messages.properties:大小=标题不能为空,且不得超过{max}个字符。
- messages.properties:javax.validation.constraints.Size.message =标题不能为空,且不得超过{max}个字符。
- ValidationMessages.properties:Size.addForm.title =标题不能为空,且不得超过{max}个字符。
- ValidationMessages.properties:大小=标题不能为空,且不得超过{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实现默认的资源包的密钥 :
- ValidationMessages.properties:javax.validation.constraints.Size.message =你知道一叠,大小必须是{分钟}和{MAX}之间
基本上,目前的结论是,在默认情况下,我不能使用命名我的特定邮件的参数。 当我重写的默认jsr303资源包的精确关键字命名的参数只能 &&当我使用相同的默认jsr303资源包文件名,这是ValidationMessages.properties
我宁愿避免具有插玩现在,因此如何找出{0}或{1}或{2}指的是什么文档中的原题。