On each Loop, try formstate=iteration. Here's an example:
http://jumpstart.doublenegative.com.au/jumpstart/examples/tables/editableloop1
And for T5.4:
http://jumpstart.doublenegative.com.au/jumpstart7/examples/tables/editableloop1
Cheers,
Geoff
On 16/04/2014, at 12:30 AM, Tony Nelson wrote:
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
titleMultiple components in a loop/title
/head
body
t:form t:id=myForm
h3Group A/h3
t:loop source=groupA value=domainObj index=idx element=div
t:EditObject domainObj=domainObj idx=idx/
/t:loop
h3Group 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
ListSimplePojo groupA;
@Property
ListSimplePojo 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();
}
ListSimplePojo createGroup() {
ListSimplePojo result = new ArrayListSimplePojo();
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
-
To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
For additional commands, e-mail: users-h...@tapestry.apache.org