Hi Dan,

This seems to be the most promising solution as of yet.  I am
however a little unclear as to how this avoids the need for
a request for each row added.

If I understand what your describing the LookupDispatchAction
extension is for handling forms with multiple buttons.  As you
describe one of the operations of this action is to add a new
element to the collection from which I am populating the form
fields.

My confusion is that I don't see how a request is avoided for
every new row added.  I would like to add multiple rows to my
html form on the client side w/ javascript (making no request
to the server) and then allow the user to populate and when
submitted all new rows result in new instances of whatever
kind of object being added to the collection.

I can provide a more detailed explanation if it helps, I'm not
entirely sure I can do what I want to do with struts at this
point.

Rob

Dan Tran wrote:
I just implemented myself, so let me throw a shot at this.

In my case, I make my action derived from LookupDispatchAction
which can handle multiple button submission handlers.
One of the button is called something like "addRow". When you hit this
addRow button, struts will repopolate what ever on your screen and dispatch
it
to your "addRow" handler where you can add new empty row to your collection
and forward back to your screen.

regarding your out of index problem, I would suggest to use common
Collection
ListUtils.lazyList.  Here is an example a lazy collection in a my form

    private List gradeViews =  ListUtils.lazyList(new ArrayList(), new
GenericFactory("org.glvnsjc.view.StudentGradeView"));

    //there is no direct setXXX, call getXXX first and populate the object
    // lazy list takes care all dynamic allocation
    public StudentGradeView getGradeView(int index) {return
(StudentGradeView) gradeViews.get(index); }
    public void removeAllGradeView() { this.gradeViews.clear(); }
    public List getGradeViews() { return this.gradeViews;}

Please look up GenericFactory in the maling list, I dont want to repost it

If you dont know LookupDispatchAction yet, learn it.  It has the magic that
I cant live without

Good luck!!!

-Dan


----- Original Message ----- From: "Rob" <[EMAIL PROTECTED]>
To: "Struts Users Mailing List" <[EMAIL PROTECTED]>
Sent: Saturday, June 07, 2003 8:55 AM
Subject: Re: adding / creating new collection elements in a form




Perhaps I was not making myself clear when I first posted this.

I know how to write the javascript, I know how to use struts
nested/logic tags.  What I was looking for when I posted was
a solution whereby I could add new elements to a collection
in a form.  Not update existing elements, thus increasing the
size of a collection based on properties from fields that
were added by client side scripting.




I've not been able to find a solution to this within the mailing
list.  But I would like to the following.

I have a page with a collection of fields which are populated by
a form (via it's collection).  I also have a button which would
allow the addition of a new row. (hopefully)

Name  Descrip
[ xy ][ foo   ]
[ ab ][ bar   ]

Add

(1) I would like to have the add button add a new pair of text
input fields each time it is clicked. (2) I would like it if
clicking add did not make a request to the server this being the
case it suggests some kind of client side javascript adding the
new fields.

The problems of course with this are the following.

(1) client side code won't be able to utilise the struts tags
   and as such I won't know what values to set the appropriate
   input text element attributes to.
(2) It is highly likely that even if I solved problem (1) that
   it would result in a IndexOutOfBounds exception, or just not
   bother with the properties from the new fields.

Has anyone else solved this?  Does struts have a mechanism for
dealing with this?  I'm fully aware of nested/logic tags but
if they are the way I can't see how.

Suggestions would be appreciated, Thanks!

Rob



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to