Ok, I'm a bit stumped here. I'm using Tapestry 4.1.3, and I'm trying to
use (sub)components which have form input fields inside a For loop.

I have a list of items, initialized by a "calling" page, and one as
placeholder for the current value, something like this:

    public abstract Foobar getCurrentFoobar();

    @Persist
    public abstract List<Foo> getFoobars();
    public abstract void setFoobars(List<Foobar> value);


The template has code like this:

  <form jwcid="@Form">

    <div jwcid="@For" source="ognl:foobars" value="ognl:currentFoobar">
      <div jwcid="@FoobarEdit" foobar="ognl:currentFoobar"/>
    </div>

    <input type="submit" jwcid="@Submit"
      action="listener:dostuff"/>

  </form>

The FoobarEdit component contains edit fields for various attributes of
the Foobar object. When submit is pressed on the page, I want to iterate
through the components and use them to do a batch-edit of multiple
Foobar values into the database.

Now, things work fine at display time, I get a nice list of edit
components, with input fields.

The problem comes when I want to do the "iterate through the components"
thing in the listener. I found the method getComponents() in
AbstractComponent, which should return a Map of the components
containted on this page/component, keyed by id.

However, when I call that, I only get *one* of the FoobarEdit
components, with a key $FoobarEdit. The other unnamed components on the
page get ids like $If_0, $If_1 to separate them from each other, but not
my own component.

Either only one component exists internally when the listener is called
(for some weird reason), or they are all getting the $FoobarEdit id
instead of a numbered one, making all but one of them invisible in the
component map.

So... I'm stumped. What am I doing wrong, and/or how should I best do
this? Is there some way to manually specify the id of the generated
component in some dynamic fashion? Should I iterate through the
components via some other fashion? Is this whole idea of doing batch
processing of multiple elements via subcomponents like this simply not
doable in Tapestry?

Any help much appreciated.

//Petri

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

Reply via email to