> -----Original Message----- > From: Jim Barrows > Sent: Tuesday, September 07, 2004 1:44 PM > To: Struts Users Mailing List > Subject: RE: A couple of questions > > > > > > -----Original Message----- > > From: Marco Tedone [mailto:[EMAIL PROTECTED] > > Sent: Tuesday, September 07, 2004 1:22 PM > > To: Struts Users Mailing List > > Subject: Re: A couple of questions > > > > > > What do you mean? This is often our case. I mean, we often > > have composite > > value objects: one that contains another, which contains > > another. Are there > > any issues with such design? > > Depends :)
Okay, the previous post is why you shouldn't take phone calls and answering cow-orkers complex question while answering questions on the list. *SIGH* Take two. Depends :) Which way you look at the problem. It's not any worse then what you're already experiencing with doing it yourself. After all, the ActionForm is just a convenient envelope to store your request parameters nothing more. If you try and think of it as a VO, then you can end up with interesting design choices. Ignore the below > > I typically don't look at the model when designing my UI. UI > gets designed, and then if I don't have a legacy DB, create > the backend from there. Otherwise I just use the VO as a > container until I hit the DAO, which handles putting the VO > into the right table(s). > Then there are the complex cases. Like the one below. How > do you design a UI that will easily allow a user to > manipulate Master/Detail data? Then how do you do that in > the web world where everything is a String, and there is no > such thing as collections of fields, much less objects. > Hence the problem. HTTP is woefully inadequate for > applications. ActionForm is a good attempt at bridging that. > > I like using ActionForm strictly for input, and for view only > will use the VO directly. Some people use the ActionForm for > input and output. So, we end up with two solutions. One, > in which the ActionForm directly mirrors the VO. So you would > have the VO as below, converted to all strings, and the array > of order lines being an ActionForm as well. It should be > fairly easy to figure out how to build the jsp from that. A > whole lot of ActionForms. A whole lot of formatting that has > to be done for display in the Action class. You have to code > the JSP's with the path to the field (form.subObject.fieldName) etc. > > The second solution, is to do the UI differently. You > directly display the VO as you have it, in JSP using the <fmt > or <bean:write tags to write out the data etc. so it looks > good. Then you provide an edit button to edit data in the > master record. Basically, that button takes you to a page > that uses an ActionForm specialized to the Master record. > Saves the data either to the DB, and then back to the view > page which pulls from the DB, or to a Session attribute which > the page then reads from. Each detail line is done the same. > > If you only allow one (or a limited numberof) field(s) in the > children to be edited, then you could use a single form with > arrays of the fields, and an action to apply the edits to the > data. You could also have a form for each child. It's one > ActionForm class, however for each child you would have a > different form, with hidden fields filled in, all going to > the same action and maybe a bit of JS to submit the form for > changes etc. > > The second way give you some more flexibility, and fewer ActionForms. > > This isn't really a problem with ActionForms exactly, imho, > but rather the web in general. Even if you just map request > params directly into a VO, you have the same issues you do > with an ActionForm. The difference being what we've already > discuessed. > > > > > Example: > > > > public class OrderVO implements Serializable { > > > > /** Order lines */ > > private LinesVO[] orderLines; //Eclipse will do the rest > > > > //Other attributes.... > > > > } > > > > public class LinesVO implements Serializable { > > > > /** Line Items */ > > private LineItemsVO[] lineItems;//Eclipse will do the rest > > > > //Other attributes... > > } > > > > public class LineItemsVO implements Serializable { > > > > /** Item code */ > > private int id;//Eclipse will do the rest > > > > } > > > > And so on. > > > > > > > ActionForms aren't perfect. However, what they buy you in terms of > > everything else, usually make them well worth it. Where > > they tend to be a > > bit of a pain is in trying to model complex object models > in one form. > > > > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [EMAIL PROTECTED] > > For additional commands, e-mail: [EMAIL PROTECTED] > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]