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]
>
>

Reply via email to