Multiple new objects with a component

2014-04-15 Thread Tony Nelson
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



Re: Multiple new objects with a component

2014-04-15 Thread Geoff Callender
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