I think the problem with this approach is that the For component has
no way of uniquely identifying your list values.

I would try using the keyExpression or converter parameters of the For
component to do this instead.
http://tapestry.apache.org/tapestry4.1/components/general/for.html



On 1/9/07, Jim Downing <[EMAIL PROTECTED]> wrote:
Hi,

I'm trying to get some simple list editing working using For and
TextField but not having much luck.

Home.html: -

<html xmlns="http://www.w3.org/1999/xhtml"; xml:lang="en" lang="en">
<head>
<title>Example app</title>
</head>
<body jwcid="@Body">
<h1>Hello world!</h1>
<form jwcid="@Form" success="listener:submit">List
of names:
<div jwcid="@For" source="ognl:names" value="ognl:name" index="ognl:idx">
<p><span jwcid="@Insert" value="ognl:idx">1</span> <input
    jwcid="@TextField" value="ognl:name" /></p>
</div>
<input type="submit" jwcid="@Submit" listener="listener:add" value="Add" />
<input type="submit" jwcid="@Submit" value="Update" /></form>
</body>
</html>

Home.java

public abstract class Home extends BasePage implements
PageBeginRenderListener {

    private static final Logger LOG = Logger.getLogger(Home.class);

    public void pageBeginRender(PageEvent event) {
        LOG.info("Begin render. Rewind? " +
getRequestCycle().isRewinding());
        if(getNames()== null) {
            LOG.info("Initializing names list");
            setNames(new ArrayList<String>());
        }
    }

    public void submit() {
        LOG.info("Submitted. List is: " + getNames());
    }

    public void add() {
        LOG.info("Adding a blank name to "+ getNames());
        List<String> nms = getNames();
        nms.add("");
        setNames(nms);
    }

    public abstract List<String> getNames();

    public abstract void setNames(List<String> nms);

    public abstract String getName();

    public abstract int getIdx();
}

When I click the "Add" button I get: -

9627410 [btpool0-3] INFO  com.example.pages.Home  - Begin render.
Rewind? true
9627411 [btpool0-3] INFO  com.example.pages.Home  - Initializing names list
9627423 [btpool0-3] INFO  com.example.pages.Home  - Adding a blank name
to []
9627424 [btpool0-3] INFO  com.example.pages.Home  - Submitted. List is:
[    ----    ]
9627424 [btpool0-3] INFO  com.example.pages.Home  - Begin render.
Rewind? false

Then changing the value in the form input and clicking submit produces
this: -

9638858 [btpool0-3] INFO  com.example.pages.Home  - Begin render.
Rewind? true
9638858 [btpool0-3] INFO  com.example.pages.Home  - Initializing names list
9638859 [btpool0-3] INFO  com.example.pages.Home  - Submitted. List is: []
9638859 [btpool0-3] INFO  com.example.pages.Home  - Begin render.
Rewind? false

I'm puzzled - why hasn't the list been populated from the TextFields in
the For loop?

Any pointers gratefully received.

cheers,
jim


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




--
Jesse Kuhnert
Tapestry/Dojo team member/developer

Open source based consulting work centered around
dojo/tapestry/tacos/hivemind. http://blog.opencomponentry.com

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

Reply via email to