One other thing I just realized that I should include is the fact that all
of my forms are request based, which doesn't allow me to include the form
information from one to the next, so to get around that (for more testing) I
have included the array in a Session variable so that I can pull it out in
the second action.

Again thanks for all thoughts/ideas/suggestions

On 10/19/06, Adam K <[EMAIL PROTECTED]> wrote:

If this is a bad technique I would be more than happy to change it to a
more standard technique.  Any suggestions on how to improve my code are
always welcome.

thanks for the suggestions thus far.
Adam

On 10/19/06, Chris Pratt <[EMAIL PROTECTED] > wrote:
>
> I don't think I've ever seen that technique before, but you have to
> remember
> that size() is 1 based and index (or get(index) ) is 0 based.  So when
> someone calls getNumProducts(5), your while loop fills in indexes 0, 1,
> 2,
> 3, and 4 (because then index and this.results.size() are both 5), then
> you
> proceed to ask for results.get(5), which doesn't exist.  You should be
> able
> to change your while list to something like:
>
> while(index >= this.results.size() + 1) {
>   this.results.add(new Product());
> }
>
>   (*Chris*)
>
> On 10/19/06, Adam K < [EMAIL PROTECTED]> wrote:
> >
> > Here are the 2 get methods that I have.
> >
> > thanks again for all the help.
> >
> >
> >     public int getNumProducts() {
> >         return numProducts;
> >     }
> >
> >
> >     public int getNumProducts(int index)
> >     {
> >         if(this.results== null)
> >         {
> >             this.results = new ArrayList();
> >         }
> >         while(index >= this.results.size())
> >         {
> >             this.results.add(new Product());
> >         }
> >
> >         Product p = (Product) results.get(index);
> >         return p.getNumProducts();
> >     }
> >
> > On 10/19/06, Puneet Lakhina < [EMAIL PROTECTED]> wrote:
> > >
> > > On 10/19/06, Adam K < [EMAIL PROTECTED]> wrote:
> > > >
> > > > Hi all I have been working on this probelm for the past couple of
> > days,
> > > > and
> > > > don't seem to be making any progress on it.  I am fairly certain
> it is
> > a
> > > > problem with my understanding of struts, and as such it makes it
> quite
> > > > difficult for me to solve the problem myself.
> > > > I am trying to use a textfield and pull values from it.  The
> following
> > > > explains the scenario.  User clicks on a page, page loads with a
> form
> > > that
> > > > has a textfield.  User enters search criteria and submits
> form.  This
> > > > works
> > > > fine.  Page returns with the search form and textfield, as well as
> a
> > > > second
> > > > form that displays the results of the search.  This also works
> > > fine.  The
> > > > user then goes through the results filling in numbers for each
> result
> > > > indicating how many of each they would like to order and then
> submit
> > the
> > > > form.  This is where the problem results.  I end up gettting an
> error
> > > from
> > > > the page anytime I submit the form where there is 1 or more
> results.
> > > > Submitting with no results works fine and the page loads
> correctly.
> > > > Submitting with 1 result errors out with
> > > >
> > > > java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
> > > >
> > > > Submitting with 10 results errors out with:
> > > > java.lang.IndexOutOfBoundsException: Index: 2, Size: 0
> > > >
> > > > Submitting with 100 results errors with :
> > > > java.lang.IndexOutOfBoundsException: Index: 6, Size: 0
> > > >
> > > > Submitting with 200 results errors with :
> > > > java.lang.IndexOutOfBoundsException: Index: 155, Size: 0
> > > >
> > > > The number seems to be random (I am guessing it is how far into
> the
> > > > form it gets before the error is encountered)
> > > >
> > > > Any help on this would be much appreciated.
> > > > I am including all the information that I believe to be important
> but
> > > > would have no problem including more.
> > > >
> > > > In the jsp form there is:
> > > >
> > > > <html:form action="/skuSearch" method="post" >
> > > >         <center>
> > > >                 <table width="400" border="1" align="center"
> > > > cellpadding="0" cellspacing="0">
> > > >                         <tr>
> > > >                                 <td>
> > > >                                         <table border="0"
> > > cellspacing="1"
> > > > cellpadding="1" width="100%" >
> > > >                                            <tr align="center">
> > > >
> <td><html:text
> > > > property="searchString" size="30"
> > > > maxlength="30"/></td>
> > > >
> > > >
> > > <td><html:submit>Search</html:submit></td>
> > > >                                            </tr>
> > > >                                            <tr><td
> > > colspan="2"></td></tr>
> > > >                                         </table>
> > > >                                 </td>
> > > >                         </tr>
> > > >                 </table>
> > > >         </center>
> > > > </html:form>
> > > >
> > > >
> > > > <html:form action="/searchResults" method="post" >
> > > > <center><p><html:submit>Add To Order</html:submit></p></center>
> > > > <table align ="center" width="90%" border=1>
> > > >         <tr>
> > > >                 <td>    Product                 </td>
> > > >                 <td>    Product Desc            </td>
> > > >                 <td>    Quantity                </td>
> > > >         </tr>
> > > >
> > > > <logic:notEmpty name="SkuSearchForm" property="results">
> > > >         <logic:iterate name="SkuSearchForm" property="results"
> > > > id="results">
> > > >         <tr>
> > > >                 <td>    <bean:write name="results"
> property="product"
> > > > />                        </td>
> > > >                 <td>    <bean:write name="results"
> > > property="description"
> > > > />                    </td>
> > > >                 <td>    <html:text name="results"
> > property="numProducts"
> > > > indexed="true" />
> > >
> > >
> > > post the getter method for the numProducts. that might be causing
> the
> > > problem.
> > >
> > >      </td>
> > > >         </tr>
> > > >         </logic:iterate>
> > > > </logic:notEmpty>
> > > >
> > > > <logic:empty name="SkuSearchForm" property="results">
> > > >                 <tr><td colspan="3" align="center">NO
> > RESULTS</td></tr>
> > > > </logic:empty>
> > > > </table>
> > > > </html:form>
> > > >
> > > > In the action (this action is only for the search results):
> > > >         public ActionForward execute(ActionMapping mapping,
> ActionForm
> > > > form,
> > > > HttpServletRequest request, HttpServletResponse response) throws
> > > > Exception
> > > >         {
> > > >                 SkuSearchForm skuform = (SkuSearchForm) form;
> > > >                 HttpSession session = request.getSession();
> > > >                 User user = new User();
> > > >                 Order order = new Order();
> > > >                 ArrayList products = new ArrayList();
> > > >
> > > >                 ArrayList results = new ArrayList();
> > > >                 user = (User)session.getAttribute("User");
> > > >                 order = user.getOrder(user.getCurrOrder());
> > > >                 products = order.getProducts();
> > > >                 int number = 0;
> > > >                 int count = 0;
> > > >
> > > >                 Iterator iter = results.iterator();
> > > > //there is nothing happening in here as there is no results for
> some
> > > > reason.
> > > >                 while(iter.hasNext())
> > > >                 {
> > > >                         Product p = (Product) iter.next();
> > > >                         if(p.getNumProducts() != 0 )
> > > >                         {
> > > >                                 products.add(p);
> > > >                         }
> > > >
> > > >                         count++;
> > > >                 }
> > > >                         {
> > > >                                 count = 1;
> > > >                                 Product p = new Product("TestProd
> " +
> > > > count, "TestDesc"+count + "
> > > > " +count, 10, new BigDecimal("101.0"));
> > > >                                 products.add(p);
> > > >                                 results.add(p);
> > > >                                 count++;
> > > >                         }
> > > >
> > > >                 order.setProducts(products);
> > > >                 order.setOrderId("ID12");
> > > >                 user.changeOrder(order, "ID12");
> > > >                 skuform.setResults(results);
> > > >
> > > >                 return mapping.findForward("success");
> > > >         }
> > > >
> > > > In the form (The methods I thought were appropriate):
> > > >
> > > >         public void setResults(ArrayList results)
> > > >         {
> > > >            this.results=results;
> > > >         }
> > > >
> > > >         public ArrayList getResults()
> > > >         {
> > > >            return this.results;
> > > >         }
> > > >
> > > >         public Product getResult(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);
> > > >         }
> > > >
> > > >
> > > >
> > > > Thanks so much in advance for your time on this matter.
> > > >
> > > > Adam
> > > >
> > > >
> > >
> > >
> > > --
> > > Puneet
> > >
> > >
> >
> >
>
>

Reply via email to