I am trying to build a form where there are N instances of a custom editing component. For example, something simple like:
<t:container xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd"> ${idx} : Id: <t:textfield value="domainObj.id" validate="maxLength=5" maxlength="5" /> : B: <t:textfield value="domainObj.a" validate="maxlength=10" maxlength="10" /> <br/> </t:container> The component Java code is trivial: public class EditObject { @Property @Parameter(required = true) SimplePojo domainObj; @Property @Parameter(required = false, value = "0") Integer idx; void onValidate() { log.info("EditObject onValidate: " + domainObj); } } There is no AJAX, just a simple posted form. This component is used like this: <!DOCTYPE html> <html xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd" > <head> <title>Multiple components in a loop</title> </head> <body> <t:form t:id="myForm"> <h3>Group A</h3> <t:loop source="groupA" value="domainObj" index="idx" element="div"> <t:EditObject domainObj="domainObj" idx="idx"/> </t:loop> <h3>Group B</h3> <t:loop source="groupB" value="domainObj" index="idx" element="div"> <t:EditObject domainObj="domainObj" idx="idx"/> </t:loop> <t:submit value="Submit"/> </t:form> </body> </html> The main controller is very simple: public class MultiDemo { @Inject private Logger logger; @Property List<SimplePojo> groupA; @Property List<SimplePojo> groupB; @Property SimplePojo domainObj; @Property Integer idx; @Log void onValidateFromMyForm() { for (SimplePojo sp : groupA) { logger.info("A: " + sp.toString()); } for (SimplePojo sp : groupB) { logger.info("B: " + sp.toString()); } } @Log void setupRender() { createGroups(); } @Log void onPrepare() { // if this is commented out, I get a NPE in onValidateFromMyForm createGroups(); } void createGroups() { groupA = createGroup(); groupB = createGroup(); } List<SimplePojo> createGroup() { List<SimplePojo> result = new ArrayList<SimplePojo>(); for (int i = 0; i < 3; i++) { result.add(new SimplePojo()); } return result; } } That's it, the whole page. But I just can't get it to work. If I comment out onPrepare() I get a NPE in the onValidateFromMyForm, which makes sense. With it uncommented, onValidateFromMyForm is always new null filled objects. The logging in the component onValidate shows domainObj.id being set, but never domainObj.A. When the form redraws, it loses any values I typed in and is blank again. I'm missing something obvious I'm sure, but can't see what it is. Any help would be greatly appreciated. Thanks Tony Since 1982, Starpoint Solutions has been a trusted source of human capital and solutions. We are committed to our clients, employees, environment, community and social concerns. We foster an inclusive culture based on trust, respect, honesty and solid performance. Learn more about Starpoint and our social responsibility at http://www.starpoint.com/social_responsibility This email message from Starpoint Solutions LLC is for the sole use of the intended recipient(s) and may contain confidential and privileged information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message. Opinions, conclusions and other information in this message that do not relate to the official business of Starpoint Solutions shall be understood as neither given nor endorsed by it. --------------------------------------------------------------------- To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org For additional commands, e-mail: users-h...@tapestry.apache.org