The ComponentInterceptor as implemented today provides a reasonable implementation of IoC. It will I'm sure work very well to provide actions with instances of DAO's or maybe Hibernate Sessions and such.
However there is a separate, but perhaps slightly related issue that ComponentInterceptor "almost" solves. For the sake of simplicity I will express this in terms of web applications, although I suspect that the concept might be transferable to a general XWork discussion. Many web applications use the http session to store Data Transfer Objects between requests. For example the application might load a UserDTO from the database in one action, present some of it's values in a jsp form that the user can edit, and finally write back the new state of the UserDTO to the database in the next action. A way of dealing with this without using the http session would be to write out all the values to the form (perhaps using hidden tags for some data), and then let webwork copy all values into a new instance of the UserDTO with the ParameterInterceptor. Making sure all the fields of the object are in some way present in the jsp becomes tedious and bug prone when the DTO contains a lot of fields and maybe a graph of connected object (let's say a couple of AddressDTO instances). Jason suggests saving the DTO objects in the http session manually. This is essentially how our web applications have been implemented in the past. The problem with this approach is that in a large application it becomes difficult to get a good idea of what is stored in the http session throughout the application. Also looking at a single action you can not tell what it expects to be present in the session without reading all the code for that action. These are issues that would be solved by moving the session related code to an interceptor. The interceptor could examine the interfaces that the action implements to determine what fields of the action to set with objects from the session, and what fields to write back to the session after the action completes. This would also allow programmers to easily identify what each action expects from the session. An xml configuration file could contain any extra information necessary, which would also provide a single location where programmers could see everything that the application puts in the session. OK, so you're starting to get my drift. Session scope components in webwork allready provide almost all of this, except writing back the state of the action field to the session in the interceptor's after() method. Perhaps some more tweaks would be benefitial as far as configuration options in components.xml etc, but this is the basic idea. If someone feels that this is conceptually a completely different beast from what components are today then maybe this should be a separate interceptor, config file etc. But as far as I can see this is not incompatible with the general idea of components and the IoC in webwork today. Since we are on a tight schedule we will most likely take a stab at this ourselves at Tradedoubler. But of course we would prefer something like this in the official webwork release rather than having our own custom behaviour. What do other people think? Is this a valid idea? // Per Mellqvist -----Original Message----- From: Jason Carreira [mailto:[EMAIL PROTECTED] Sent: Friday, November 14, 2003 3:48 PM To: [EMAIL PROTECTED] Subject: RE: [OS-webwork] Component object setting The ComponentInterceptor will create and store your component in the Session. It will not pick up the fact that you've created a new one and put it into your Action. I think we're talking about a persistent object here, right? IMO this is not a good fit for a component. A good component would be something like a DAO which will load and save objects for you, not the objects themselves. For doing this kind of editing, you're going to want to save your Objects in the Session manually. You could make your Action ModelDriven and have something like this: Public Object getModel() { Map session = ActionContext.getContext().getSession(); MyObject obj = session.get(MY_OBJECT_KEY); if (obj == null) { obj = // get an object or create a new one session.put(MY_OBJECT_KEY); } return obj; } Then form fields will be set on the obj... Jason ------------------------------------------------------- This SF. Net email is sponsored by: GoToMyPC GoToMyPC is the fast, easy and secure way to access your computer from any Web browser or wireless device. Click here to Try it Free! https://www.gotomypc.com/tr/OSDN/AW/Q4_2003/t/g22lp?Target=mm/g22lp.tmpl _______________________________________________ Opensymphony-webwork mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/opensymphony-webwork