struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Schuster Joel M Contr ESC/NDC <Joel.Schus...@cisf.af.mil>
Subject RE: Correct Prepopulate Method
Date Thu, 17 Mar 2005 17:19:35 GMT
Ok, I have figured out why I was having a problem. Why I'm getting the
output that I am I still have to investigate.

I first noticed that all the examples that I've seen forward directly to a
jsp page, I forward to an action that then forwards to a jsp page. I've done
this since it then hides the fact I'm using jsp pages since all my actions
are actually mapped to using the *.html extention instead of the *.do. So my
results, going through an action look like it's just an html page ...

Anyhow, I then looked at how I was doing my forward and removed the
'redirect = "true"' and changed it to false. Now when I add an attribute to
the request scope the jsp page finds it.

Like I said, I'm not really sure why the redirect = "true" would give me
problems, but as soon as I changed it to false everything worked.

Thanks for all of your patience reading all this.
 

> -----Original Message-----
> From: Hubert Rabago [mailto:hrabago@gmail.com] 
> Sent: Thursday, March 17, 2005 10:14 AM
> To: Struts Users Mailing List
> Subject: Re: Correct Prepopulate Method
> 
> Hi Joel,
> 
> From the message you include below:
> 
> =====================
> If you want to use request scope, change /submitForm to:
> <action path="/submitForm" name="myForm" 
> scope="request"...>....</action>
> 
> then in showPage:
>     request.setAttribute("myForm", myForm);
> 
> =====================
> 
> The key here is that the mapping to which a form gets 
> submitted to dictates which scope that form will reside.  It 
> doesn't matter where a setup action puts it, because setup is 
> optional.  In fact, it can place it in all three scopes (app, 
> session, request), and the <html:form> tag will still use the 
> scope specified in the mapping which it will be submitted to.
> 
> I think what's causing your confusion is that you're using an 
> ActionForm for data being sent to the JSP, as opposed to 
> something that holds data from an html <form>.  (It probably 
> didn't help that my message started with a typo - I meant to 
> say "setup action" and instead wrote "setup form".)  Sure, 
> you can use it for that purpose, but it's important to 
> understand what it was initially designed for in order to 
> understand how it behaves, before attempting to use it for 
> other purposes.
> 
> http://marc.theaimsgroup.com/?l=struts-user&m=111077992831529&w=2
> 
> In your case, you seem to be just listing down a set of 
> values, as opposed to showing a form that's been 
> prepopulated.  I personally won't bother creating a form just 
> to pass these down and list them in a static way, though I 
> understand that some people do.
> 
> Hubert
> 
> 
> 
> 
> On Thu, 17 Mar 2005 09:48:04 -0700, Schuster Joel M Contr 
> ESC/NDC <Joel.Schuster@cisf.af.mil> wrote:
> > I'm still trying to understand this. Please be patient.
> > 
> > Here's my setup. I'm trying to create a test page that will do 
> > regression tests against all the different parts of my 
> internal systems.
> > 
> > I have one simple form (ActionForm) defined.
> > 
> > <form-bean name="CollectionForm"
> > type="org.apache.struts.action.DynaActionForm" >
> >   <form-property name="collection" type="java.util.Collection" /> 
> > </form-bean>
> > 
> > I have two actions that deal with this ...
> > 
> > <action path="/outputpage/testresults"
> > forward="/WEB-INF/jsp/testresults.jsp" /> <action 
> > path="/actions/runtests" type="org.loom.fe.actions.RunTestAction"
> >         name="CollectionForm" scope="request" >
> >         <forward name="results" path="/outputpage/testresults.do"
> > redirect="true" />
> >         <forward name="errror" ... />
> > </action>
> > 
> > So then in my execute of RunTestAction:
> > 
> > {
> > ...
> > DynaActionForm dform = (DynaActionForm) form;
> > 
> > // create my test results and put them in the collection Collection 
> > testResult = ...
> > 
> > // put the collection into the outgoing form dform.set( 
> "collection", 
> > testResults);
> > 
> > // put the form into the right scope
> > 
> > request.getSession().setAttribute( "CollectionForm", dform);
> > 
> > // go to the results page
> > return (mapping.findForward( "results")); }
> > 
> > To kick things off I have this in my admin screen:
> > 
> > <html:link action="/actions/runtests.do">Run Tests</html:link>
> > 
> > Then in my testresults.jsp:
> > 
> > <logic:present name="CollectionForm">
> >   <table>
> >    <logic:iterate id="result" name="CollectionForm" 
> property="collection">
> >      <tr>
> >        <td><bean:write name="result" property= ... Test 
> result ... /><td>
> >      <tr>
> >    </logic:iterate>
> >   </table>
> > </logic:present>
> > 
> > OK... Just to make sure we all understand, the above works! 
> It works 
> > just fine!
> > REPEAT: IT WORKS
> > 
> > However, I really don't like putting the CollectionForm 
> that's going 
> > to my results page being in the session scope. I'd much 
> rather have it 
> > only in the request scope of the results page. That way this 
> > CollectionForm doesn't travel all around with the session. 
> Of course I 
> > could manually remove it from within the jsp page, but that 
> would kill the whole point of MVC...
> > Right?
> > 
> > I've tried making two changes:
> > 1. change the action for the results page <action 
> > path="/outputpage/testresults"
> > forward="/WEB-INF/jsp/testresults.jsp" scope="request" /> 2. change 
> > the scope of the variable for the CollectionForm in RunTestAction 
> > request.setAttribute( "CollectionForm", dform);
> > 
> > That doesn't work. The CollectionForm is not available at 
> all to the jsp.
> > 
> > Then I tried this:
> > 1. change the action for the results page <action 
> > path="/outputpage/testresults"
> > forward="/WEB-INF/jsp/testresults.jsp" 
> name="CollectionForm" scope="request"
> > />
> > 
> > This then make a CollectionForm available to the jsp but it was 
> > empty.. Not the same one that I had linked to the request above.
> > 
> > It seems to me that really it shouldn't be able to work since the 
> > request form my RunTestsAction is a totally different 
> object than the 
> > request for the jsp page. Thus the example from Hubert 
> below wouldn't work in my mind.
> > 
> > So, bottom line... I can make what I'm trying to do work. 
> But it just 
> > doesn't feel right putting it into session scope. I can't 
> believe that 
> > no-one has had to deal with this before.
> > 
> > > -----Original Message-----
> > > From: Hubert Rabago [mailto:hrabago@gmail.com]
> > > Sent: Friday, March 11, 2005 9:36 AM
> > > To: Struts Users Mailing List
> > > Subject: Re: Correct Prepopulate Method
> > >
> > > You would usually do prepopulation in a setup ACTION.  
> Which scope 
> > > you place the form in depends on how you configure the 
> action that 
> > > the form will be submitted to.  For example, if you have 
> > > "/showPage.do"
> > > and "/submitForm.do", where submitForm is configured as:
> > >
> > > <action path="/submitForm" name="myForm" ...>....</action>
> > >
> > > Then in the action for showPage, you'd:
> > >
> > >     ModuleConfig moduleConfig =
> > > ModuleUtils.getInstance().getModuleConfig(request);
> > >     FormBeanConfig formBeanConfig =
> > > moduleConfig.findFormBeanConfig("myForm");
> > >     DynaActionForm myForm = (DynaActionForm) 
> > > formBeanConfig.createActionForm(getServlet());
> > >
> > >     myForm.set("propName",propValue);
> > >     request.getSession().setAttribute("myForm", myForm);
> > >
> > >
> > > If you want to use request scope, change /submitForm to:
> > > <action path="/submitForm" name="myForm"
> > > scope="request"...>....</action>
> > >
> > > then in showPage:
> > >     request.setAttribute("myForm", myForm);
> > >
> > >
> > > Hubert
> > >
> > >
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Mime
View raw message