struts-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jon Wilmoth <jonwilm...@yahoo.com>
Subject Re: [S2] validation error message params w/ message key?
Date Fri, 15 Jun 2007 21:53:21 GMT
Thanks for the interim solution.  I'd still like to see S2 move away from proprietary resource
bundle entries.  It seems as if msg params could easily be resolved against the stack prior
to the getText method being called.

----- Original Message ----
From: Lukasz Racon <lukasz_public@racon.pl>
To: dev@struts.apache.org
Sent: Friday, June 15, 2007 1:51:01 PM
Subject: RE: [S2] validation error message params w/ message key?


When the message is evaluated you have an access to the stack, try this:
errorMessage.invalidRange=${getText(fieldName)} must be between ${min} and ${max}, current
value is ${bar}. 

Then have in your resources:
bar=Your display name for field bar
foo=Your display name for field foo

IMHO, Struts 2 should drop the message as a required field in validation (esp. Annotations)
and provide meaningful defaults for all i18n keys like:
errorMessage.required=${getText(fieldName)} is required.

Lukasz 

-----Original Message-----
From: Jon Wilmoth [mailto:jonwilmoth@yahoo.com] 
Sent: Friday, June 15, 2007 1:18 PM
To: dev@struts.apache.org
Subject: Fw: [S2] validation error message params w/ message key?

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



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-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