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]