Ted,
Again this is great information. I think it confirms something I have been
struggling with -:
I am trying to handle the CANCEL case of an "edit a record" screen which was
arrived at from the previous "list of records" screen. They use the same
formbean which has an "action" field. When entering the first "list of
records" screen it is set to "action=display", and when entering the "edit a
record" screen it is set to edit/add/delete as approrpriate. The reason for
this is my formbean validation differs in the two cases (another story).
The problem I have is if the use hits CANCEL on the "edit a record" screen I
wanted to send them back to the "display list of records" screen via the
associated action (cf directly to the JSP), ie so that the action sets up
appropriate objects required (don't want to recode this).
The catch seems to be I need to set the "action" request parameter back to
DISPLAY from say EDIT in the "edit a record" action prior to forwarding to
the "display list of records" action.
It seems this may not be possible??????
- setting action element in the form from within the action prior to the
forward doesn't work as the pseudo code below indicates that "If a form bean
is in play, the ActionServlet resets and populates
it from the HTTP request"
- I still haven't found a way to override a request parameters value from an
action yet??? (it seems possible using a JSP tag, ie the forward tag, so
maybe I just haven't worked it out yet)
Other this this maybe I need to re-think the design? :-)
Ideas anyone?
Cheers
Greg
----Original Message Follows----
From: Ted Husted <[EMAIL PROTECTED]>
Reply-To: "Struts Users Mailing List" <[EMAIL PROTECTED]>
To: Struts Users Mailing List <[EMAIL PROTECTED]>
Subject: Re: Hidden Field in a form. Do I use struts taglib or vanilla
html?
Date: Thu, 29 Nov 2001 14:16:11 -0500
The general order of things is
1) Client requests an Action URI (the path from the ActionMapping)
2) The container passes the request to the ActionServlet
3) The ActionServlet looks up the mapping for the path
4) If the mapping specifies a form bean, the ActionServlet sees if there
is one already, or creates one.
4.1) If a form bean is in play, the ActionServlet resets and populates
it from the HTTP request
4.2) If the mapping has validate set to true, it calls validate on the
form bean. If it fails, it forwards to the path specified by the input
property, and this control flow ends
5) If the mapping specifies an Action type, it is instantiated if
needed, or reused if already there
5.1) The Action's perform method is called, with the instantiated form
bean
5.2) The Action may populate the form bean, call business objects,and do
whatever else is needed
5.3) The Action returns an ActionForward to the ActionServlet
If the ActionForward is to another Action URI, we begin again, else it's
off to a JSP or something.
If the ActionForward is to a JSP
1) Jasper, or the equivalent, renders the page
2) If the Struts html tags see the ActionForm in the request (from 4),
it populate the controls from the ActionForm. Else the html:form tag
creates one, and uses its default values in its tags.
(Can't draw, but I sure can number;-)
If you just need to create a blank form (4), you can use a "continue
Action" to pass control through an Action and then out to the JSP.
public ActionForward perform(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
return mapping.findForward(request.getParameter("continue"));
}
So in the mapping you specify the ActionForm for this instance,
validate=false, and a local forward for the JSP input form.
David Lauta wrote:
>
> Thanks for the reply,
> I understand that you would like me to seperate the UI from the Model
> Can you be more specific about
> 'The recommended control flow is to go through an Action first'
> I'm trying to get a one page does it all UI - Is there a tag I should use
to invoke
> some kind
> of preprocess action?
>
> What I am after is populating the List boxes with data from (ultimately)
EJB's
> I need to decide where I am going to instantiate and initialize my EJB's
( Session
> Beans )
>
> To this point in my model I have subclassed ActionForm, Action, and
ActionMapping
> my struts-config.xml is:
> <form-beans>
> <form-bean
> name="StrutsTestForm"
> type="web.StrutsTestForm" />
> </form-beans>
>
> <action-mappings>
> <action
> name="StrutsTestForm"
> path="/StrutsTest"
> type="web.StrutsTestAction"
> input="/StrutsTest.jsp"
> attribute="StrutsTestForm" >
>
> <forward name="success" path="/StrutsTest.jsp" />
> </action>
>
> </action-mappings>
>
> Should I be using the ActionFormBean instead or in conjunction with the
ActionForm
> subclass?
> >From the ActionForm I can get the ActionMapping through
> ActionServlet.findMapping(String)
> At what point in time is the servlet associated with ActionForm valid.
>
> Most of my confusion comes from the order of things.
> So far my model
> 1 Create the ActionForm ( Servlet is null )
> 2 Initialize the JSP ( all form values are null )
> 3 Get ActionMapping Name
> 4 Get ActionMapping Name
> 5 Create another ActionForm (Servlet is null)
> 6 Some magic I haven't been able to trace yet
> 7 The JSP appears and the list boxes are filled in
>
> It seems like I have two instances of ActionMapping and two instances of
ActionForm
>
> How should the initialization really occur?
>
> Thanks for your attention
> -David Lauta
> [EMAIL PROTECTED]
>
> Ted Husted wrote:
>
> > In Struts 1.0.1, init() is called if the ActionForm is instantiated by
> > the JavaServer Page. In Struts 1.0, this only happens when the
> > ActionForm is instantiated by the ActionServlet. Of course, any default
> > values assigned to the fields in the ActionForm class itself will be
> > available in either case. The recommended control flow is to go through
> > an Action first, and populate the ActionForm there. Populating the
> > ActionForm from the JSP is a Model 1 strategy.
> >
> > -- Ted Husted, Husted dot Com, Fairport NY USA.
> > -- Custom Software ~ Technical Services.
> > -- Tel +1 716 737-3463
> > -- http://www.husted.com/struts/
> >
> > David Lauta wrote:
> > >
> > > Is there a method in the framework that gets invoked allowing you to
> > > initialize the ActionForm before the JSP is displayed?
> > >
> > > Brett Porter wrote:
> > >
> > > > That's an interesting design decision. I have always had a form
bean and
> > > > then another bean containing the actual data. The action copies it
across,
> > > > processes it, and stores it.
> > > >
> > > > The reason I'd do it that way is that I imagine the message is a
"business
> > > > class", and you don't really want you model "polluted" by extending
an
> > > > ActionForm. Maybe I've been living in OOAD land too long though ;)
> > > >
> > > > This can trip you up though - at least once I have added the form
element,
> > > > added it to the bean, added it to the form bean, and forgetten to
do the
> > > > setter in the action :) The way around that is probably a function
in the
> > > > form bean that says "fill my business class" and "fill from a
business
> > > > class". Actually, I might put that in my todo list :D
> > > >
> > > > Cheers,
> > > > Brett
> > > >
> > > > -----Original Message-----
> > > > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]]
> > > > Sent: Thursday, 29 November 2001 12:48 PM
> > > > To: Struts Users Mailing List
> > > > Subject: Re: Hidden Field in a form. Do I use struts taglib or
vanilla
> > > > ht ml?
> > > >
> > > > The data I am storing in the bean is logically different from what
the
> > > > hidden field value is, I have a message
> > > >
> > > > message
> > > > {
> > > > string Recipent
> > > > string From
> > > > string MessageBode
> > > > }
> > > >
> > > > And the hidden field is action=sendMessage and I didn't think
that
> > > >
> > > > message
> > > > {
> > > > string Action
> > > > string Recipent
> > > > string From
> > > > string MessageBode
> > > > }
> > > >
> > > > would be the correct thing to do, but I am open to suggestions. If
it
> > > > works out easier to put this extra field in my message formbean
then I
> > > > will do it. What do you think?
> > > >
> > > > Cheers
> > > >
> > > > Tony
> > > >
> > > > Brett Porter wrote:
> > > >
> > > > > The question I ask is why you wouldn't put it in your form bean?
> > > > >
> > > > > I prefer form.getAction() over httpServletRequest.getParameter(
"action" )
> > > > > any day! :)
> > > > >
> > > > > -----Original Message-----
> > > > > From: Yee Keat [mailto:[EMAIL PROTECTED]]
> > > > > Sent: Thursday, 29 November 2001 12:36 PM
> > > > > To: Struts Users Mailing List
> > > > > Subject: Re: Hidden Field in a form. Do I use struts taglib or
vanilla
> > > > > html?
> > > > >
> > > > >
> > > > > Yup, using the taglib makes it compulsory to have that field in
your
> > > > > FormBean
> > > > >
> > > > > On Thursday 29 November 2001 09:25 am, you wrote:
> > > > >
> > > > >>Hi
> > > > >>
> > > > >>I want to include a hidden field in a form which I have. I do
not want
> > > > >>this information to be included in the formbean which is defined
for
> > > > >>this page. How can I do this? Should I just use plain html
> > > > >>
> > > > >><INPUT TYPE=hidden NAME=action VALUE=send>
> > > > >>
> > > > >>without using the html taglib supplied with struts?
> > > > >>
> > > > >>Cheers
> > > > >>
> > > > >>Tony
> > > > >>
> > > > >
> > > >
> > > > --
> > > > To unsubscribe, e-mail:
> > > > <mailto:[EMAIL PROTECTED]>
> > > > For additional commands, e-mail:
> > > > <mailto:[EMAIL PROTECTED]>
> > >
> > > --
> > > Thank you,
> > > David Lauta
> > > [EMAIL PROTECTED]
> > > (561)272-2698
> > > (561)289-0502 cell
> > >
> > > --
> > > To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
> > > For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
> >
> > --
> > To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
> > For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
>
> --
> Thank you,
> David Lauta
> [EMAIL PROTECTED]
> (561)272-2698
> (561)289-0502 cell
>
> --
> To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
> For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
-- Ted Husted, Husted dot Com, Fairport NY USA.
-- Custom Software ~ Technical Services.
-- Tel +1 716 737-3463
-- http://www.husted.com/struts/
--
To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>
_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>