I am working with struts 1.2.9 and trying to use the iterate function.  I
seem to be having a problem extracting the value from a text field inside an
iterated loop.  I am able to get/set values thare are being placed simply
into html, but run into difficulties when working with the text fields.  I
am able to set the values into the text field, but unable to pull them out
when in the action code of the form.  The following is what I have used for
code thus far:

If I understand the struts wiki page that I was pointed to properly the name
in the text must be the same as the id, but when I would try that I would
simply receive index out of bounds errors - that was making all references
to counter called results.
Results is an object that is holding a product, description, and
numProducts.


<logic:notEmpty name="ProdSelectionForm" property="results">
   <logic:iterate name="ProdSelectionForm" property="results" id="counter">
   <tr>
       <td>    <bean:write name="counter" property="product" />
       </td>
       <td>    <bean:write name="counter" property="description" />
       </td>
       <td>    <html:text  name="counter" property="numProducts"
indexed="true" size="15" maxlength="15"/>    </td>
   </tr>
   </logic:iterate>
</logic:notEmpty>


This is in the Action portion - well it is a snippet of the entire thing.

ProdSelectionForm prodSelection = (ProdSelectionForm) form;

int count = 0;
 // take in the number of items in the order ArrayList and iterate through
them
 while(count < order.getProductsSize() )
 {
    Product p = null;
    // pull the product from the order at each position to manipulate them.
    p = (Product) products.get(count);

    // set the order amount to be what the old amount was on top of the
amount that is currently on the screen
    p.setNumProducts(p.getNumProducts() + 1 + prodSelection.getNumProducts
());
    // the below code was to test and see if the variable would change at
all, with the +100 it would increment the amount on the screen by 100
everytime the action was called, so that lead me to believe that I am
setting the values right.
    //p.getNumProducts() + 100 + prodSelection.getNumProducts() );

    // set the product back into the product arraylist so it can be passed
to the
    products.set(count, p);
    count++;
 }

//set the product arrayList back into order so it can be presented on the
screen.
order.setProducts(products);

And finally for the form I have the following relevant code:

   /**
    * @return Returns the numProduct.
    */
   public int getNumProducts() {
       return numProducts;
   }
   /**
    * @return ReturnsnumProduct at the specified index
    */
   public int getNumProducts(int index) {
       Product p = (Product) results.get(index);
       return p.getNumProducts();
   }

   /**
    * @param numProducts The numProduct to set.
    */
   public void setNumProducts(int numProducts) {
       this.numProducts = numProducts;
   }

I seem to be able to pull the value from the page, but it won't pull the
changed values - that is to say it will only pull the value that was there
when the page was first presented regardless of anything that I type.
Could someone point me to where I am having a brain fart.  Ps. I have been
made aware that I should be using JSTL, but would welcome any other critisms
the list might have to offer.

thanks in advance for your time on this matter.

Reply via email to