As ordens dos parâmetros padrão de validação do bean?
Atualmente, estou tentando fornecer uma mensagem de validação personalizada usando validação de bean.
Atualmente usando spring mvc 3.1.1 + validação do bean apache.
No meu bean, eu especifico:
<code>@Size(min=1, max=50) private String title; </code>
E nas minhas mensagens.propriedades:
<code>Size.addForm.title=The title must not be empty and must not exceed {1} characters. </code>
Da experiência, descobri que:
{0} refere-se a 'título'{1} refere-se ao máximo, que é 50{2} refere-se ao min, que é 1e será exibido comoThe title must not be empty and must not exceed 50 characters.
qual é correto.
Mas todos estes são de experimentos. Eu me perguntose há documentações indicando a ordem dos parâmetros para as restrições padrão ?
Eu tentei esperançosamente usandoSize.addForm.title=The title must not be empty and must not exceed {max} characters.
baseando-se no ValidationMessages.properties padrão, mas acaba com NumberFormatException no{max}
. Eu acho que tem algo a ver com as interpolações?
Assim, cada um deles falha de forma independente com NumberFormatException no{max}
:
Este é o stacktrace:
<code>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) </code>
Este é o único que trabalha com o parâmetro nomeado,tem que ser ValidationMessages.properties e deve ser exatamente a chave que existe no pacote de recursos padrão pela implementação do jsr 303 :
ValidationMessages.properties : javax.validation.constraints.Size.message = você conhece wad, o tamanho deve estar entre{min} e{max}Basicamente, a conclusão atual é, por padrão, que não posso usar parâmetros nomeados em minhas mensagens específicas. O parâmetro nomeadosó funciona quando eusubstituir a chave exata no resourcebundle jsr303 padrão&& quando eu uso o mesmo nome de arquivo jsr303 resourcebundle padrão, que éValidationMessages.properties
Eu prefiro evitar ter que jogar com interpolação por enquanto, daí a pergunta original sobre como descobrir que {0} ou {1} ou {2} se refere ao que na documentação.