So, just wanted to toss this into the mix and see what you all thought.
Here's the issue I had:
Vertigo has a Money object that is a value and currency. I wanted to set
the value from a form. I wanted the currency code to be definable for
that specific form element. Oh, and Money is immutable.
I wrote up a simple TypeConverter to convert to the Money object. Only
problem was getting the currency code. After trying a few different
things, I decided to sub-class the parameters interceptor and add a
concept that I call parameter attributes. These get added to the
ValueStack context and then are accessible to the converter. They look
like this:
<s:hidden name="[EMAIL PROTECTED]" value="EUR"/>
<s:textfield key="child.allowance"/>
For each HTTP parameter, I assume that if the parameter contains an
at-sign (@) it is an attribute of another parameter. This gets placed
into a Map of attributes. Once all the attributes are found for each
parameter, I iterate over the parameters and then add all of that
parameters the attributes to the ValueStack context Map.
I picked the at-sign because it looks like an 'a', which makes it easy
to remember it is an attribute and isn't a valid Java identifier
character. This does conflict with OGNL class and member accessors, but
we shouldn't be evaluating the parameter names in that manner, so it
should be fine.
I've found that this is really useful for loads of different situations
including free form date input fields where you need to convert to a
Date and then back to a String and want the format to be preserved. I
use Joda rather than the JDK (go Joda!) and this works really nicely for
that case. Looks like:
<c:hidden name="[EMAIL PROTECTED]" value="MM/dd/yyyy"/>
<s:textfield key="subscription.expireDate"/>
Essentially, this is really helpful for immutable types that have
multiple values such as phone numbers and money and types that have
tricky parsing semantics like dates. I think this would be a good
addition to core, but I wanted to toss it out there first.
Thoughts?
-bp
p.s. Oh and if someone knows of a standard way to do this that I missed,
let me know!
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]