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]

Reply via email to