Hi Geoff, You can pass an instance of the RenderCommand that could capture the context, hopefully this snippet can give a hint.
Regards, Dmitry for (int i = 0; i < emailIds.length; i++) { String emailId = emailIds[i]; boolean display = displayStatusArray[i]; // Set tempId for getEmailStatusZoneId() tempId = emailId; // There may be multiple instances of this component being refreshed at the same time, // so we need to render it immediately ajaxResponseRenderer.addRender(getEmailStatusZoneId(), (RenderCommand) (writer, queue) -> { // Initialise before rendering EmailDeliveryStatus.this.tempId = emailId; EmailDeliveryStatus.this.show = display; setupEmail(); ((RenderCommand) emailStatusZone.getBody()).render(writer, queue); initJavaScript(); }); } On Tue, Jan 3, 2023 at 2:47 PM JumpStart < geoff.callender.jumpst...@gmail.com> wrote: > Hi all, > > Let’s say I have loop around a zone, and on a particular event I want to > render just the 2nd and 4th instances of the zone. How do I do that? > > <t:loop source="1..10" value="zoneIndex"> > > <t:zone t:id=“thingZone" id="prop:zoneId” > > <!— Contents from thing goes here. —> > </t:zone> > > </t:loop> > > @Property > private int zoneIndex; > > @InjectComponent > private Zone thingZone; > > public String getZoneId() { > return “thingZone_" + zoneIndex; > } > > My problem is that the following does not correctly render thing 2 and 4. > > public String onMyEvent() { > > thing = getThing(2); > zoneIndex = 2; > ajaxResponseRenderer.addRender(thingZone); > > thing = getThing(4); > zoneIndex = 4; > ajaxResponseRenderer.addRender(thingZone); > > thing = null; > > } > > As you can see below, the response includes the right zone names, but the > rendered content of them is the same and is based on whatever the final > values were. In this case the final value of thing was null, so white space > was rendered into both zones. > > { > "_tapestry" : { > "content" : [ > [ > “thingZone_4", > "\n\t\t\t\t\t\t\t\t\n\t\t\t\t" > ], > [ > “thingZone_2", > "\n\t\t\t\t\t\t\t\t\n\t\t\t\t" > ] > ], > "inits" : [ > > So addRender(ClientBodyElementZone zone) queues up the request for later. > Can I somehow queue up each request with the current values that I want it > to use when rendering? > > Cheers, > > Geoff -- Dmitry Gusev AnjLab Team http://anjlab.com