Daniel Baldes wrote:
Hello,
I have a web form where you can, generally speaking, assign objects to
groups. This is done via a multiple select box which displays an
object's name and uses its ID property as value.
So, usually, my action would get back a String array containing the
IDs of the selected objects. I want the framework to load the
corresponding objects from the database and pass them as a Collection
to my action's setObjects(Collection<Object> objects) method, so that
my action doesn't have to deal with loading objects.
So I wrote a type converter. The "convertFromString" method takes the
String array with the IDs, determines the target element type using
ObjectTypeDeterminer, loads the objects and returns them in a
collection. In this direction - form to action - it works quite well.
Great. I've never tried this myself. I suppose you run the risk of
some performance penalties doing it here (eg. select n+1 due to
iteration) and the conversion error exception is probably not ideal, but
otherwise I'm impressed.
Now my questions:
1. extending StrutsTypeConverter forces me to implement String
convertToString(Map context, Object o). I think there is no common
sense way of converting a collection back to a String in this context.
It would, maybe, make sense to convert it to a String[]. But what I
actually want is to have access to the unconverted collection in the
JSP. This might seem strange from some point of view, and I could live
without it, but is there a way to do this? Example:
<s:select multiple="true"
name="myObjects"
list="myObjects" listKey="id" listValue="name" />
This way I could use getMyObjects() for displaying my objects and
setMyObjects() for setting them (using only their IDs).
It does really follow the intended contract of the interface, but I
don't see why convertFromString can't return a different view of the
object than convertToString. Have you tried it? This effectively gives
you the "databinding" feature of ASP.net (which I personally cringe at,
but can't argue with how productive it is to work with)
2. Is there a way to define a type converter application wide, like
"always use this type converter for setting types which are subclasses
of X" and "for setting types which are Collection<subclass-of-X>"?
This way I could define the type converter once for all
persistence-capable classes.
classpath:xwork-converters.properties allows you to define global
converters by class name. You may be able to the the element_ feature
for collections.
Otherwise visitor validation will have to do
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]