Die Standardparameter für die Reihenfolge der Bean-Validierung?

Ich versuche derzeit, mithilfe der Bean-Validierung eine benutzerdefinierte Validierungsnachricht bereitzustellen.

Derzeit wird Spring MVC 3.1.1 + Apache Bean-Validierung verwendet.

In meiner Bohne gebe ich an:

<code>@Size(min=1, max=50)
private String title;
</code>

Und in meinen messages.properties:

<code>Size.addForm.title=The title must not be empty and must not exceed {1} characters.
</code>

Aus dem Experiment habe ich herausgefunden, dass:

{0} bezieht sich auf "Titel"{1} bezieht sich auf das Maximum von 50{2} bezieht sich auf die min, die 1 ist

und es wird angezeigt alsThe title must not be empty and must not exceed 50 characters. welches ist richtig.

Aber alle diese sind aus Experimenten. Ich wundere michGibt es Dokumentationen, in denen die Reihenfolge der Parameter für die Standardeinschränkungen angegeben ist? ?

Ich habe es hoffentlich mit versuchtSize.addForm.title=The title must not be empty and must not exceed {max} characters. Basiert auf den Standardwerten von ValidationMessages.properties, endet jedoch mit NumberFormatException auf dem{max}. Ich denke, es hat etwas mit den Interpolationen zu tun?

Aktualisieren

Jedes dieser Verfahren schlägt unabhängig mit NumberFormatException auf dem fehl{max} :

messages.properties : Size.addForm.title = Der Titel darf nicht leer sein und darf nicht überschreiten{max} Zeichen.messages.properties : Größe = Der Titel darf nicht leer sein und darf nicht überschreiten{max} Zeichen.messages.properties : javax.validation.constraints.Size.message = Der Titel darf nicht leer sein und nicht überschreiten{max} Zeichen.ValidationMessages.properties : Size.addForm.title = Der Titel darf nicht leer sein und darf nicht überschreiten{max} Zeichen.ValidationMessages.properties : Größe = Der Titel darf nicht leer sein und darf nicht überschreiten{max} Zeichen.

Dies ist der 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>

Dies ist der einzige, der mit dem benannten Parameter it funktioniertmuss ValidationMessages.properties sein und genau der Schlüssel, der im Standardressourcenpaket von der Implementierung von jsr 303 vorhanden ist :

ValidationMessages.properties : javax.validation.constraints.Size.message = Sie wissen, dass die Größe zwischen sein muss{Mindest} und{max}

Grundsätzlich ist die aktuelle Schlussfolgerung, dass ich in meinen spezifischen Nachrichten standardmäßig keine benannten Parameter verwenden kann. Der benannte Parameterfunktioniert nur wenn ichÜberschreiben Sie den genauen Schlüssel auf dem Standard jsr303 resourcebundle&& wenn ich den gleichen Standard-jsr303-Resourcebundle-Dateinamen verwende, der istValidationMessages.properties

Ich bevorzuge es, im Moment nicht mit Interpolation spielen zu müssen, daher bezieht sich die ursprüngliche Frage, wie man herausfindet, dass {0} oder {1} oder {2} auf was in der Dokumentation verweist.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage