Yes it shouldn't be affected, but there seems to be a bug that affects this behaviour, see WW-2599.
https://issues.apache.org/struts/browse/WW-2599 On Mon, Apr 21, 2008 at 2:20 PM, Adam Hardy < [EMAIL PROTECTED]> wrote: > Yes, I get the picture. If you haven't already, download the source bundle > and look at the examples. > > Actually I don't think I understood one thing you said. You're using an > action taglib in the JSP, which invokes the list retrieval. Surely that's > not affected by validation failure? I was under the impression that the tag > simply calls the default or specified method on the action. > > > Toni Lyytikäinen on 21/04/08 12:00, wrote: > > > Well, for the retrieval I use stateless session bean injected to the > > action > > with Spring, like this (simplified): > > > > public User getUser() { return user; } > > > > public String edit() { > > user=dao.get(id); > > return SUCCESS; > > } > > > > So it's nothing special. > > > > The session approach of course isn't ideal, but more a workaround until > > the > > bug gets solved or I find a better way to do it. The idea is that the > > action > > is still executed every time the user enters the form from a success > > result, > > and the non-fresh session based list is only used when validation fails. > > I > > don't know if you get the idea from this explanation. > > > > Other than that, I found out that the Preparable interface can also be > > used > > for this, so I might explore that option further. > > > > On Mon, Apr 21, 2008 at 1:19 PM, Adam Hardy < > > [EMAIL PROTECTED]> wrote: > > > > I think so - the chain is just a forward inside the same request so you > > > shouldn't lose the field errors. But I'm just setting up a new website > > > now > > > with this approach, so actually I'm as inexperienced as you are - my > > > previous Struts2 project had a different approach entirely. > > > > > > You second question regarding retrieval from the DB revolves around > > > how > > > you do the retrieval, but you don't say. > > > > > > I actually cheat like crazy and have a special domain object type > > > converter which retrieves an Entity from the DB when the HTTP param = > > > "entity=253" but this isn't the way type converters were meant to be > > > used. > > > > > > This doesn't happen if validation fails, because I ordered the > > > validation > > > interceptor before the params interceptor in my interceptor stack. And > > > of > > > course the edit action doesn't do validation - just the save. (of > > > course it > > > throws an exception if you forget to send the id of the entity you > > > want to > > > edit). > > > > > > Generally this makes it easier to deal with nested entities. > > > > > > But if you just have a simple domain model, go the documented way. I > > > shouldn't really be saying all this because I haven't got it working > > > yet :( > > > > > > Re: lists, you can put them into the request but then you have to > > > manage > > > them in case some other user changes them. Plus you will use up > > > memory. If > > > you're using a decent persistence layer that has 'second level cache' > > > which > > > you can set up when you go live, rely on that instead for caching. > > > > > > > > > > > > > > > Toni Lyytikäinen on 21/04/08 11:02, wrote: > > > > > > Thanks for the answer! Does the resultType="chain" approach preserve > > > > the > > > > fieldErrors and the values the user has already typed into the form? > > > > Also, > > > > how do you prevent the edit action from retrieving the entity from > > > > the > > > > database in the case the validation fails? > > > > > > > > I also thought about putting the lists into the http session instead > > > > of > > > > the > > > > request, but I don't really like cluttering the session with such > > > > things. > > > > > > > > > > > > On Mon, Apr 21, 2008 at 12:55 PM, Adam Hardy < > > > > [EMAIL PROTECTED]> wrote: > > > > > > > > Hi Toni > > > > > > > > > there are several different approaches. The one I use has an Edit > > > > > action > > > > > and a Save action. The Edit action fetches the dropdown list and > > > > > puts > > > > > it in > > > > > the request and results in the form jsp. > > > > > > > > > > The form submits to Save and if validation fails, the Input result > > > > > is > > > > > resultType="chain" and pipes the request back to the Edit action. > > > > > > > > > > HTH > > > > > Adam > > > > > > > > > > > > > > > Toni Lyytikäinen on 21/04/08 10:05, wrote: > > > > > > > > > > Hello, > > > > > > > > > > > What is generally regarded as the best practise for populating a > > > > > > select > > > > > > element in a form from database so that it works regardless of > > > > > > the > > > > > > action > > > > > > and the result from which the form is displayed? > > > > > > > > > > > > I've tried this: > > > > > > > > > > > > action configuration: > > > > > > <action name="edit" method="edit" class="admin.Users"> > > > > > > <result>/WEB-INF/jsp/admin/userForm.jsp</result> > > > > > > </action> > > > > > > <action name="save" method="save" class="admin.Users"> > > > > > > <result type="redirect-action"> > > > > > > <param name="actionName">list</param> > > > > > > </result> > > > > > > <result name="input">/WEB-INF/jsp/admin/userForm.jsp</result> > > > > > > </action> > > > > > > > > > > > > > > > > > > jsp page: > > > > > > <s:form action="save"> > > > > > > <s:action name="listIntoRequest" /> > > > > > > <s:select list="#request.list" /> > > > > > > ... > > > > > > </s:form> > > > > > > > > > > > > where listIntoRequest looks like this: > > > > > > > > > > > > public String listIntoRequest() { > > > > > > List<Item> list=dao.getListFromDatabase(); > > > > > > request.setAttribute("list", list); > > > > > > return SUCCESS; > > > > > > } > > > > > > > > > > > > but the problem is with validation. If the validation fails, and > > > > > > the > > > > > > input > > > > > > result is returned in the in the form processing page (save), > > > > > > then > > > > > > the > > > > > > action tag never executes the method listIntoRequest (see > > > > > > WW-2599), > > > > > > and > > > > > > the > > > > > > form will not display correctly. > > > > > > > > > > > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > > > > > > > > > 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] > >