Hi Adam, Use the sample code as requested by you. You can ask me any help with nested Tags and from advanced struts
JSP <nested:notEmpty name="ProdSelectionForm" property="results"> <nested:iterate name="ProdSelectionForm" property="results" id="Result" type="com.test.javabeans.TestObject"> <tr> <td> <nested:text name="Result" property="description" /> </td> </tr> </nested:iterate> </nested:notEmpty> ActionForm public class ProdSelectionForm extends ActionForm { Collection arlResults=null; //can be arrayalist /** * @return Returns the arlResults. */ public Collection getResults() { return arlResults; } /** * @param arlResultsThe arlResultsto set. */ public void setResults(Collection arlResults) { this.arlResults= arlResults; } /** * * toString representation of object * @return An instance of StringBuffer with Struts Action Form properties * */ public String toString() { StringBuffer sbTemp = new StringBuffer(); sbTemp.append("{"); sbTemp.append("arlResults=" ); sbTemp.append(arlResults); sbTemp.append("}"); return sbTemp.toString(); }//end of toString }//end Actionform TestObject Java Bean import java.io.Serializable; public class TestObject implements Serializable String description =null; int numProducts =0; /** * @return Returns the description. */ public String getDescription() { return description; } /** * @param description The description to set. */ public void setDescription(String description) { this.description = description; } /** * @return Returns the numProducts. */ public int getNumProducts() { return numProducts; } /** * @param numProducts The numProducts to set. */ public void setNumProducts(int numProducts) { this.numProducts = numProducts; } }//end object Action Class (loading the page) ProdSelectionForm prodSelectionForm= (ProdSelectionForm) form; com.test.javabeans.TestObject obj1=new com.test.javabeans.TestObject (); obj1.setDescription("desc1"); obj1.setNumProducts (1); com.test.javabeans.TestObject obj2=new com.test.javabeans.TestObject (); obj1.setDescription("desc2"); obj1.setNumProducts (2); ArrayList arlResults=new ArrayList (); arlResults.add(obj1); arlResults.add(obj2); prodSelectionForm.setResults(arlResults); Action Class (Submitting the page) When you submit the page just print the actionform you wouyld see the updated results of description ,numproducts in action ProdSelectionForm prodSelectionForm= (ProdSelectionForm) form; System.out.println("prodSelectionForm="+prodSelectionForm); Regards Raghu -----Original Message----- From: Adam K [mailto:[EMAIL PROTECTED] Sent: Wednesday, November 22, 2006 3:06 AM To: [EMAIL PROTECTED] Cc: Struts Users Mailing List Subject: Re: Indexed Properties If you might be able to provide a sample I would be very greatful. As it stands I have come up with the following : changing the JSP to : <logic:notEmpty name="ProdSelectionForm" property="results"> <logic:iterate name="ProdSelectionForm" property="results" id="Result"> <tr> <td> <html:text name="Result" property="description" indexed="true" /> </td> </tr> </logic:iterate> </logic:notEmpty> Result seemed more natural as it is a single element of the results. All I want to be able to do is pull 3 things out of an object, display them in a scope of request, and allow the user to update the list and submit the form and have the changes be picked up - who would have thought that would be so incredibly complex ? *Note* The part that leads me to believe it's a misunderstanding of the tags involved is that I can get a single textfield to work perfectly, with all the requirements (other than it being an object with multiple properties). On 11/21/06, Raghuveer <[EMAIL PROTECTED]> wrote: hi Adam, I understand description,numProducts are properties in User defined Object/java bean in results(getResults(),setResults(..)) Collection in your actionForm. For this kind of requirments there will not be any change in actionform even though ,complixety increases in nesting.. Solution is to use Nested Tags. Nested tags are used for nesting a object inside the other. In your requirment "results" is a nested property in your actionform. "results" collection has a collection of objects. I have used Nested tags for most complex requirments and succeeded. Nested Tags is the real power of Struts... Regards Raghu -----Original Message----- From: Adam K [mailto:[EMAIL PROTECTED] Sent: Saturday, November 18, 2006 2:55 AM To: Struts Users Mailing List Subject: Re: Indexed Properties Thanks for the suggestion I'll keep trying things and see what I can get from it. On 11/17/06, Hubert Rabago <[EMAIL PROTECTED]> wrote: > > Lots of people have done it. Search the archives [1]. Search for > "indexed" and "lazyList". I've done it with both ActionForm and > DynaActionForm. > > Hubert > > [1] http://struts.apache.org/mail.html > > On 11/17/06, Adam K <[EMAIL PROTECTED]> wrote: > > I think I have found the problem - or at least a potential cause. Would > it > > be correct in stating that this will not work using ActionForm (what I > was > > using) and that I must instead use DynaActionForm ? > > > > Thanks for the time thus far. > > > > > > On 11/17/06, Hubert Rabago < [EMAIL PROTECTED]> wrote: > > > > > > Adam, > > > > > > Try adding a getResultsPage() that doesn't take params and always > > > returns a valid collection. (Throw in the setResultsPage() that > > > accepts a collection as well.) > > > > > > Hubert > > > > > > On 11/17/06, Adam K <[EMAIL PROTECTED]> wrote: > > > > This has been driving me nuts for the past little bit. > > > > I have a page that is populated using indexed properties. The > > > prepopulation > > > > works fine, and I get the results as I would expect them, but > trying to > > > > submit the form I get an index out of bounds exception. I know that > it > > > is > > > > being caused because the page doesn't have the arrayList to use in > the > > > > indexed properties. I guess my question boils down to using > indexed > > > > properties properly. I will start by putting in an explanation of > what > > > I > > > > have and what I am trying to do: > > > > > > > > The following is what I am working with : > > > > JSP: > > > > > > > > <logic:notEmpty name="ProdSelectionForm" property="results"> > > > > <logic:iterate name="ProdSelectionForm" property="results" > > > > id="ResultsPage"> > > > > <tr> > > > > <td> <bean:write name="ResultsPage" > > > property="description" > > > > /> </td> > > > > <td > <html:text name="ResultsPage" > > > property="numProducts" > > > > indexed="true" /> </td> > > > > </tr> > > > > </logic:iterate> > > > > </logic:notEmpty> > > > > > > > > What I am trying to achieve is that a user clicks on a link, they > are > > > sent > > > > to page, and all of the values are prepopulated. The page is then > > > displayed > > > > and the user has the option to modify any of the variables that they > > > want to > > > > before resubmitting the page. (When they resubmit the form has a > url > > > > parameter attached to it). What is happening (or at least what I > > > believe is > > > > happening is the following: link is clicked, reset is called action > > > sets > > > > the variables, page is displayed, user can modify the page and > resubmit, > > > > reset is called on the form, the action is called (this is where it > dies > > > as > > > > there is no longer an ArrayList) to modify. My question is am I > going > > > about > > > > this in a manner that seems sensible or am I way off base ? I have > the > > > > values being prepopulated, but when trying to use the values that > the > > > user > > > > puts in I can't use them in the action, nor can I pull the values > from > > > the > > > > form without again setting the values in the form. I am hoping it > is > > > that > > > > I have over looked something, but it's possible that I don't > understand > > > > something as well. > > > > > > > > Here is the Action code (This is the entire execute method) : > > > > HttpSession session = request.getSession(); > > > > ProdSelectionForm prodSelection = (ProdSelectionForm) form; > > > > User user ; > > > > user = (User)session.getAttribute("User"); > > > > Order order = new Order(); > > > > ArrayList products = new ArrayList(); > > > > ArrayList pageRes = new ArrayList(); > > > > ArrayList results = new ArrayList(); > > > > > > > > String action = (request.getParameter("Dest") == null ? > > > "populate" : > > > > request.getParameter("Dest") ); > > > > > > > > order = user.getCurrOrder(user); > > > > > > > > if(action.equals("populate")) > > > > { > > > > prodSelection.setResults(order.getProducts()); > > > > } > > > > > > > > if(action.equals("Delete")) > > > > { > > > > ArrayList p = new ArrayList(); > > > > p = prodSelection.getResults(); > > > > > > > > int count = 0; > > > > while (count < p.size()) > > > > { > > > > Product t = (Product) p.get(count); > > > > t.setDescription("" +t.getNumProducts() +">" > > > +pageRes.size() > > > > +"<"); > > > > p.set(count, t); > > > > count++; > > > > } > > > > > > > > t.setDescription("" +t.getNumProducts() +">" +p.size() > > > +"<"); > > > > p.set(0, t); > > > > > > > > user.setOrder(p , user); > > > > prodSelection.setResults(p); > > > > prodSelection.setTest(prodSelection.getTest()+" + " + > p.size > > > ()); > > > > > > > > return mapping.findForward("success"); > > > > } > > > > return mapping.findForward("success"); > > > > > > > > > > > > > > > > > > > > Form code: (In the form code is an ArrayList called results. This > > > arraylist > > > > contains a bunch of Product ) > > > > > > > > public Product getResultsPage(int index) > > > > { > > > > if(this.results == null) > > > > { > > > > this.results = new ArrayList(); > > > > } > > > > > > > > while(index >= this.results.size()) > > > > { > > > > this.results.add (new Product()); > > > > } > > > > return (Product) results.get(index); > > > > } > > > > > > > > public void setResultsPage(int index, Product p) > > > > { > > > > if(this.results == null) > > > > { > > > > this.results = new ArrayList(); > > > > } > > > > > > > > while(index >= this.results.size()) > > > > { > > > > this.results.add(new Product()); > > > > } > > > > results.set(index, p); > > > > //return (Product) results.get(index); > > > > } > > > > > > > > public void setResults(ArrayList results) > > > > { > > > > this.results=results; > > > > } > > > > > > > > public ArrayList getResults() > > > > { > > > > return this.results; > > > > } > > > > > > > > > > > > > > > > Products is an object that stores various things about a product > with > > > > numProducts, and description being two of those things. > > > > Within Products is both getter and setter methods for the > numProducts as > > > > well as description. > > > > > > > > > > > > > > > > Thanks so much for any help you may be able to provide. > > > > > > > > > > > > > > --------------------------------------------------------------------- > > > 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] > >