John, A final question on this, please. How do I obtain *the* PersonalDetailsForm bean from the Action class so that I can populate it? Thanks, Frank.
----- Original Message ----- From: "John McGrath" <[EMAIL PROTECTED]> To: "'Struts Users Mailing List'" <[EMAIL PROTECTED]> Sent: Monday, March 08, 2004 1:58 PM Subject: RE: Struts starter > on the first hit to you personForm.do, or whatever (i presume you're not > hitting the jsp directly at any point), the backing Action class should > get the values from the validUser bean and populate the > PersonDetailsForm bean, which then gets used by the jsp. it sounds like > maybe you're using the values in the validUser bean directly with the > struts <html:form...> tags. i think what you have like this: > <html:text name="validUser"... > > maybe should be this: > <html:text name="PersonDetailsForm"... > > so the validUser bean is used by the Action classes, and the > PersonDetailsForm bean by the jsp, and logic in the Action classes > dictates when and how data is transfered between the two. validation > failure just redisplays the form (which should display what the user > just tried to enter, not the original data from validUser). validation > success might call another action that updated validUser with the new > info from PersonDetailsForm. > > at least i think so, if i understand you correctly. works like that in > similar situations here. > > > > > -----Original Message----- > From: Frank Burns [mailto:[EMAIL PROTECTED] > Sent: Sunday, March 07, 2004 9:06 PM > To: Struts Users Mailing List > Subject: Re: Struts starter > > > John, > This is very good ... > Please bear with me for a final bit of clarification. > I neglected to explain that I had already created what you call the > "PopulatePersonAction" in your example and also set up the struts-config > as you suggested. I have the equivalent of this: > > <form-beans> > <form-bean name="personalDetailsForm" > type="com.foo.PersonalDetailsForm" > /> > </form-beans> > > <action path="/PersonForm" type="com.foo.PopulatePersonAction" > name="personalDetailsForm" scope="request" validate="true" > input="/pages/PersonalDetails.jsp"> > <forward name="success" path="/pages/TheNextPageToCall.jsp" /> > </action> > > Note that the value assigned to the "input" parameter is > "/pages/PersonalDetails.jsp". > > In my PersonalDetails.jsp the action in the <html:form> tag is > PopulatePersonAction. > > When I initially call PersonalDetails.jsp, there is already a validUser > bean in the session scope, representing the current, logged-in user. On > first being displayed, I want the fields of PersonalDetails.jsp to be > populated with data from the validUser bean. Say I have an emailAddress > field that I populate, like this: <html:text name="validUser" > property="emailAddress" size="20" />. > > Let's say the user enters some invalid data into the email address field > and then clicks the submit button. > > The controller calls the personalDetailsForm and executes its validate() > method, which fails. Because of the failure, the controller then calls > PersonalDetails.jsp -- because it is the value in the "input" parameter > for the /PersonForm action defined in struts-config. > > The newly called PersonalDetails.jsp now has access to the > PersonalDetailsForm form bean containing the data entered by the user. > > HOWEVER, HOW WILL THE NEWLY CALLED PersonalDetails.jsp POPULATE THE > emailAddress FIELD WITH THE VALUE THAT THE USER ENTERED? > > Won't it just re-display the value from the validUser bean? Because > that's how it's defined in the page, i.e., <html:text name="validUser" > property="emailAddress" size="20" />. > > Thanks, > > Frank. > > > ----- Original Message ----- > From: "John McGrath" <[EMAIL PROTECTED]> > To: "'Struts Users Mailing List'" <[EMAIL PROTECTED]> > Sent: Sunday, March 07, 2004 10:19 PM > Subject: RE: Struts starter > > > > i'm a relative newcomer myself, but i think the part you're missing is > > > an Action class. > > > > Put an entry in struts-config something like this: > > > > <action path="/PersonForm" type="com.foo.PopulatePersonAction" > > name="PersonalDetailsForm" scope="request" validate="true"> > > <forward name="success" path="/pages/PersonalDetails.jsp" /> > > </action> > > > > Then write a PopulatePersonAction (or whatever) class that extends the > > > struts Action class. When you hit /PersonForm.do, PopulatePersonAction > > > can hit a datastore, create a DTO (validUser or whatever), and > > transfer the values from your DTO to the form (probably using the > > apache BeanUtils classes). When the Action class forwards to a mapping > > > ('success'), the struts tags in the form will be able to access the > > bean that was created by the Action class. > > > > likewise, if you have the form submitting to a struts-config entry > > that maps to another Action class, the validate method will be called > > before the 'execute' method of the action mapped to the *.do that form > > > is submitting to. because the validate method is called after the form > > > bean has been populated, but before the Action class' 'execute' method > > > has been called, when the validate method forwards back to the input > > form (the default behavior on failure to validate), i think the user's > > > newly submitted fields should be prepopulated, so long as you used the > > > <html:form...> tags for the form. > > > > This seemed unnecessarily complicated to me when i started using > > struts, but we soon found that if we kept things suitably atomic, the > > extra effort up front quickly paid of in code reusability (we reuse > > our action classes like mad) and standardization. good luck! > > > > john > > > > > > -----Original Message----- > > From: Frank Burns [mailto:[EMAIL PROTECTED] > > Sent: Sunday, March 07, 2004 4:15 PM > > To: [EMAIL PROTECTED] > > Subject: Struts starter > > > > > > Hi, > > I'm in the middle of working with my first application using Struts > > and desperately need some help. I've read nearly all of Ted Husted's > > "Struts In Action" book and browsed the mailing list archives but have > > > not found a solution for what I want to do. I mention this to let you > > know that I have already tried hard, unsuccessfully, to find an answer > > > to what seems to me to be a basic requirement. However, I may be > > struggling with my own misunderstanding! > > > > HERE'S THE BACKGROUND > > > > I have a session bean (validUser) and I want to use its properties to > > initially populate a "PersonalDetails" form. Then I want to use the > > validate() method of the related ActionForm (PersonalDetailsForm) to > > check the newly submitted details and, if failing validation, > > redisplay them in the PersonalDetails form, so that the user can > > correct them. > > > > HERE'S THE QUESTION: > > > > Where and how do I "initialize" (prepopulate) the form fields with the > > > properties from the validUser bean, but then enable them to be > > populated with the information entered by the user when the form fails > > > validation? > > > > HERE'S WHAT I'VE TRIED > > > > I've tried using <html:text ...> tags in the form, but they only seem > > to accept values from either the default form bean or from a specified > > > bean > > -- so that seems only to a give a single source for populating the > > fields. > > > > Thanks, > > > > Frank. > > > > > > > > > > > > > > --------------------------------------------------------------------- > > 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] > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]