Thanks, you guys are great.
----- Original Message ----- From: "Galbreath, Mark" <[EMAIL PROTECTED]> Newsgroups: Struts Sent: Monday, June 03, 2002 8:32 AM Subject: RE: a newbie question on iterate > The answer, unfortunately, is "all of the above." The iterate tag iterates > through both maps and collections in any form and in any scope, and you > display the contents of map and collection values with the <bean:write> tag. > A typical map would be key-value pairs placed in memory as > session.setAttribute() objects, whereas typical lists are placed in memory > by the ActionServlet instantiating a JavaBean (as a Struts form bean) and > making it's getters (accessors) and setters (mutators) available to JSPs and > Action classes. > > For example, let's say you want to display a list of cities for a particular > state when a user selects a state from a drop-down list in a JSP. First, > how would you populate the states list? It would be pretty tedious to > hard-code 50 states + D.C. + any territories (like Puerto Rico or Guam) into > the JSP as HTML <select> <option>s, not to mention bloating the source code. > With Struts, however, this is a piece of cake: > > 1. User is forwarded to the states/cities page from some JSP through some > Action Mapping that uses an Action class that in turn requests a List of > states from a DAO (data access object - a helper class concerned only with > querying the database). > > 2. The Action class takes the List and puts it into application scope (in > this case, since the List can be reused by any other clients): > ServletConfig.getServletContext().setAttribute( "statesList", states); > > 3. The states/list JSP can then display this List of states as an HTML > drop-down: > <html:select name="states"> > <logic:terate name="statesList" > property="states" > scope="application" > type="com.company.dao.state" > id="state"> > <html:option value="<%= state.getName() %>"> > <%= state.getName() %> > </html:option> > </logic:iterate> > </html:select> > > 4. A JavaScript onchange() event handler can then call the Action class > to request a list of cities from, say the city DAO (City.java), based on the > selected state and populate a "City" drop-down select box in the same > manner. > > This is about as simple as it gets, but note that using JSP scripting > variables is generally frowned upon by the purists. But I hope you get the > idea and then can move on to using the <html:options> tag. Note that the > List could also have been stored as a TreeMap and you could set the option > values with something like state.getAbbreviation(). The various attributes > are explained in the Struts tag documentation. > > To use a JavaBean (Struts form bean - a special use of JavaBeans that use > only booleans and Strings) with a JSP, you simply create a bean with > mutators and accessors matching the names of the input objects in your HTML > form contained in your JSP. For example, if you have a form taking user > info: > > <html:form action="/do/userInfo" method="post"> > <html:text property="fname" size="20" maxlength="20" /> > <html:text property="lname" size="20" maxlength="20" /> > <html:text property="street" size="20" maxlength="20" /> > <html:text property="city" size="20" maxlength="20" /> > <html:text property="state" size="20" maxlength="20" /> > </html:form> > <html:submit value="Submit" /> > > You would create a form bean like: > > *** > package and import statements > *** > > public class UserInfo extends ActionForm implements Serializable { > private String fname = ""; > private String lname = ""; > private String street = ""; > private String city = ""; > private String state = ""; > > public void setFname( String fname) { > this.fname = fname; > } > public String getFname() { > return fname; > } > /* > same pattern for other fields > */ > > public void reset( ActionMapping map, HttpServletRequest req) { > super.reset( map, req); > fname = ""; > lname = ""; > password = ""; > //etc. > } > } > > Now, when the user hits "Submit," the Action class associated with the path > "/do/userInfo" will be called by ActionServlet but before the action's > execute() method is called, UserInfo's setters will be called and its > properties set, making them available for writing to the database and/or the > JSP the action forwards to in struts-config (Note that if you want the > bean's info available across a user's session, do not reset the properties > in reset() and declare the bean in session scope in struts-config). > > Another JSP can now access UserInfo's properties with <bean:write> like: > > <bean:write name="UserInfo" property="fname" /> > <bean:write name="UserInfo" property="lanem" /> > etc. > > It's easy to get lost in these tags when you first start out, because they > are very powerful and can do a lot of things - much of which is indocumented > and if discovered by trial-and-error and reading this user list. The best > thing you can do at this point, however, is thoroughly read the taglib > documentation. > > Good luck! > Mark > > -----Original Message----- > From: Struts Newsgroup [mailto:[EMAIL PROTECTED]] > Sent: Sunday, June 02, 2002 10:25 AM > To: [EMAIL PROTECTED] > Subject: a newbie question on iterate > > > Subject: a newbie question on iterate > From: "Gary Tam" <[EMAIL PROTECTED]> > === > Hi, I am trying to use iterate to display a collection on a jsp, are there > any simple example out there? I tried to follow the examples with STRUTS, > but got all confuse. Do I have to store the collection in a java bean ? Is > this a collection of java beans or simple value objects? etc... Can someone > please set me straight please > > TIA > Gary > > > > -- > 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]> > -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>