struts-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jon Wilmoth <jonwilm...@yahoo.com>
Subject Fw: [S2] validation error message params w/ message key?
Date Fri, 15 Jun 2007 18:18:24 GMT
I posted this message on the user list and have since done some digging that leads me to believe
there is support for parameterizing validation messages while still using a message key. 
I believe the way to achieve this would be to define a resource bundle with the following
entry and the subsequent xml validation config:

errorMessage.invalidRange=bar must be between ${min} and ${max}, current value is ${bar}.

<field-validator type="int">
          <param name="min">6</param>
          <param name="max">10</param>
          <message key="errorMessage.invalidRange"/>
</field-validator>

That being said I think there's a chance to do things differently & in a more standard
way that a) improve S2 adoption b) reduce the number of resource bundle entries and subsequent
maintenance work.  

I looked at com.opensymphony.xwork2.validator.validators.ValidatorSupport's getMessage method
(v 2.0.2) and the following lines appears to be the candidates for improvement.  

message = validatorContext.getText(messageKey, defaultMessage); 

is followed by 

message = TextParseUtil.translateVariables(message, stack);

Instead I think 

    getText(String key, String defaultValue, List args); 

or 
    getText(String key, String defaultValue, String[] args) could/should called (with the
args being defined in the xml config file & TextParseUtil.translateVariables being called
for each configured message parameter defined in the config file)

which would look like <param position="0">${min}</param>.  The message resource
bundle entries then could be in a java.text.MessageFormat standard format.

This would allow for the re-use of a message key. So instead of:

errorMessage.invalidRange.bar=bar must be between ${min} and ${max}, current value is ${bar}.
errorMessage.invalidRange.foo=foo must be between ${min} and ${max}, current value is ${foo}.
errorMessage.invalidRange.foo=foo must be between ${min} and ${max}, current value is ${foo}.

I could have one MessageFormat standard entry like so:
errorMessage.invalidRange={0} must be between {1} and {2}, current value is {3}.

Thoughts?

----- Forwarded Message ----
From: Jon Wilmoth <jonwilmoth@yahoo.com>
To: Struts Users Mailing List <user@struts.apache.org>
Sent: Thursday, June 14, 2007 3:44:54 PM
Subject: [S2] validation error message params w/ message key?


The DTD (http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd) for the xml validation
file definition doesn't appear to support error message parameters.  How does one pass msg
parameters when using the message key (which I assume is a i18n message file key)?

Using the example on http://struts.apache.org/2.x/docs/validation.html, instead of  

<field-validator type="int">
          <param name="min">6</param>
          <param name="max">10</param>
          <message>bar must be between ${min} and ${max}, current value is ${bar}.</message>
</field-validator>

I'm trying to do 

<field-validator type="int">
          <param name="min">6</param>
          <param name="max">10</param>
          <message key="errorMessage.invalidRange">
                <param position="0">${min}</param>
                <param position="1">${max}</param>
                <param position="2">${bar}</param>
        </message>
</field-validator>


<!ELEMENT message (#PCDATA)>
<!ATTLIST message
    key CDATA #IMPLIED
>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org


Mime
View raw message