You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Raghuveer <ra...@infotechsw.com> on 2006/11/22 05:55:19 UTC

RE: Indexed Properties with nested Tags

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:adamk1@gmail.com]
  Sent: Wednesday, November 22, 2006 3:06 AM
  To: raghuveerv@infotechsw.com
  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 <ra...@infotechsw.com> 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:adamk1@gmail.com]
    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 <hr...@gmail.com> 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 <ad...@gmail.com> 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 < hrabago@gmail.com> 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 <ad...@gmail.com> 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: user-unsubscribe@struts.apache.org
    > > > For additional commands, e-mail: user-help@struts.apache.org
    > > >
    > > >
    > >
    > >
    >
    > ---------------------------------------------------------------------
    > To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
    > For additional commands, e-mail: user-help@struts.apache.org
    >
    >




RE: Indexed Properties with nested Tags

Posted by Raghu <ra...@infotechsw.com>.
I am 100% sure.
I have extensively used these futures and successful.

Using Nested Tags will decrease the Lines of Code,Easy Maintenance..

Nested tags will take care of setting the latest values to form bean .There
will not be any change in ActionForm/Action class.

Framework will take care of setting the data to actionform for nested
properties from nested tags.

Form bean may have getters and setter of scalar types(string,int...) or
nested types(user defined object,collection...).

If you have done every thing as below,Your latest values from jsp will be
set to form bean when JSP page is Submitted.



Clarification 1

Add below method in TestObject  Java Bean also.This will help you understand
the Object Content/Data during population and submit.

public String toString() {

   StringBuffer sbTemp = new StringBuffer();
   sbTemp.append("{");

   sbTemp.append("description=" );
   sbTemp.append(description);
sbTemp.append("numProducts =" );
   sbTemp.append(numProducts );


   sbTemp.append("}");
   return sbTemp.toString();

  }//end of toString

Clarification 2

System .out.println is added in order to make you understand that when JSP
is submitted you will have latest data in arlResults collection in
actionform.


Regards,
Raghu



  -----Original Message-----
  From: Adam K [mailto:adamk1@gmail.com]
  Sent: Wednesday, November 22, 2006 10:16 PM
  To: raghuveerv@infotechsw.com
  Cc: Struts Users Mailing List
  Subject: Re: Indexed Properties with nested Tags


  I should also like to say that the one part that seems to be giving me the
most problem is the setting of the variables in action when it is submitted.
  The other thing I am curious about is if what I am doing is incorrect.  I
am using one action for both the submit as well as the prepopulate based on
a url parameter.

  thanks once again.
  Adam


  On 11/22/06, Adam K <ad...@gmail.com> wrote:
    Thanks for the lengthy example, but there is one part that I am
completly lost on.  I thought that the following occurred:
    Click link to open page, formbean is reset aciton poppulates formbean
jsp retrieves values from the formbean.  User sees the screen prepopulated.
    User modifies the information and clicks on submit.  The bean is again
reset the action is called to put information in the formbean (this is the
part I have no data) the jsp then pulls the data from the formbean.

    What is the purpose of the System.out.println that you have at the end
of your action ?

    thanks again,
    Adam



    On 11/21/06, Raghuveer < raghuveerv@infotechsw.com> wrote:
      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:adamk1@gmail.com]
        Sent: Wednesday, November 22, 2006 3:06 AM
        To: raghuveerv@infotechsw.com
        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 <raghuveerv@infotechsw.com > 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:adamk1@gmail.com]
          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 <hr...@gmail.com> 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 <ad...@gmail.com> 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 < hrabago@gmail.com> 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 <ad...@gmail.com> 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: user-unsubscribe@struts.apache.org
          > > > For additional commands, e-mail: user-help@struts.apache.org
          > > >
          > > >
          > >
          > >
          >





     > ---------------------------------------------------------------------
          > To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
          > For additional commands, e-mail: user-help@struts.apache.org
          >
          >








Re: Indexed Properties with nested Tags

Posted by Adam K <ad...@gmail.com>.
I should also like to say that the one part that seems to be giving me the
most problem is the setting of the variables in action when it is
submitted.
The other thing I am curious about is if what I am doing is incorrect.  I am
using one action for both the submit as well as the prepopulate based on a
url parameter.

thanks once again.
Adam

On 11/22/06, Adam K <ad...@gmail.com> wrote:
>
> Thanks for the lengthy example, but there is one part that I am completly
> lost on.  I thought that the following occurred:
> Click link to open page, formbean is reset aciton poppulates formbean jsp
> retrieves values from the formbean.  User sees the screen prepopulated.
> User modifies the information and clicks on submit.  The bean is again
> reset the action is called to put information in the formbean (this is the
> part I have no data) the jsp then pulls the data from the formbean.
>
> What is the purpose of the System.out.println that you have at the end of
> your action ?
>
> thanks again,
> Adam
>
> On 11/21/06, Raghuveer <ra...@infotechsw.com> wrote:
> >
> >  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:adamk1@gmail.com]
> > *Sent:* Wednesday, November 22, 2006 3:06 AM
> > *To:* raghuveerv@infotechsw.com
> > *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 <raghuveerv@infotechsw.com > 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:adamk1@gmail.com]
> > > 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 <hr...@gmail.com> 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 <ad...@gmail.com> 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 < hrabago@gmail.com> 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 <ad...@gmail.com> 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: user-unsubscribe@struts.apache.org
> > > > > > For additional commands, e-mail: user-help@struts.apache.org
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > > ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> > > > For additional commands, e-mail: user-help@struts.apache.org
> > > >
> > > >
> > >
> > >
> >
>

Re: Indexed Properties with nested Tags

Posted by Adam K <ad...@gmail.com>.
Thanks for the lengthy example, but there is one part that I am completly
lost on.  I thought that the following occurred:
Click link to open page, formbean is reset aciton poppulates formbean jsp
retrieves values from the formbean.  User sees the screen prepopulated.
User modifies the information and clicks on submit.  The bean is again reset
the action is called to put information in the formbean (this is the part I
have no data) the jsp then pulls the data from the formbean.

What is the purpose of the System.out.println that you have at the end of
your action ?

thanks again,
Adam

On 11/21/06, Raghuveer <ra...@infotechsw.com> wrote:
>
>  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:adamk1@gmail.com]
> *Sent:* Wednesday, November 22, 2006 3:06 AM
> *To:* raghuveerv@infotechsw.com
> *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 <ra...@infotechsw.com> 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:adamk1@gmail.com]
> > 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 <hr...@gmail.com> 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 <ad...@gmail.com> 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 < hrabago@gmail.com> 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 <ad...@gmail.com> 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: user-unsubscribe@struts.apache.org
> > > > > For additional commands, e-mail: user-help@struts.apache.org
> > > > >
> > > > >
> > > >
> > > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> > > For additional commands, e-mail: user-help@struts.apache.org
> > >
> > >
> >
> >
>