Just thought that I would say that the following will be incredibly helpful
to anyone working on indexed properties in the future:
(It has a complete working example)

http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=58&t=009880

thanks to everyone for all of the help.



On 11/23/06, Puneet Lakhina <[EMAIL PROTECTED]> wrote:

On 11/22/06, Adam K <[EMAIL PROTECTED]> wrote:
>
> 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  property="result.description"
> indexed="true" />     </td>
>       </tr>
>     </logic:iterate>
> </logic:notEmpty>


Hmm.. As i said try something like this
<logic:notEmpty name="ProdSelectionForm" property="results">
    <logic:iterate name="ProdSelectionForm" property="results"
id="Result">
      <tr>
<!--Note the change in the following line.-->
        <td>    <html:text  property="result.description"
indexed="true" />     </td>
      </tr>
    </logic:iterate>
</logic:notEmpty>

In case you dont encounter any error while loading the page. please post
the
HTML generated. That would give a good idea of what is going wrong.


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]
> > >
> > >
> >
> >
>
>


--
Puneet


Reply via email to