Using Tapestry 5.2.0-SNAPSHOT I'm updating multiple zones after a select on Change event. The JSON response is including an extra input field after a select field in one of the zones I'm updating. The extra input is then showing up in the rendered page in the browser. Why would tapestry be adding in an extra input field? Is there a way to do this without the extra input being returned?
I created this example using the quickstart app and send the entire project if needed. Thanks Adam /* * Form.java */ package com.test.pages; import com.test.model.GenericSelectModel; import com.test.vo.SelectObj; import java.util.ArrayList; import java.util.List; import org.apache.tapestry5.EventContext; import org.apache.tapestry5.SelectModel; import org.apache.tapestry5.ajax.MultiZoneUpdate; import org.apache.tapestry5.annotations.Component; import org.apache.tapestry5.annotations.Property; import org.apache.tapestry5.corelib.components.Select; import org.apache.tapestry5.corelib.components.Zone; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.ioc.services.PropertyAccess; import org.apache.tapestry5.services.Request; /** * * @author aderkey */ public class Form { @Inject private Request request; @Inject private PropertyAccess propertyAccess; @Component(id="selectValue1", parameters = {"model=select1Model", "encoder=select1Model"}) private Select select1; @Property private SelectModel select1Model; @Property private SelectObj selectValue1; @Component(id="selectValue2", parameters = {"model=select2Model", "encoder=select2Model"}) private Select select2; @Property private SelectModel select2Model; @Property private SelectObj selectValue2; @Component(id="select1ValueZone") private Zone select1ValueZone; @Component(id="select2ValueZone") private Zone select2ValueZone; void onActivate(EventContext ctx) { List<SelectObj> select1List = new ArrayList(); select1List.add(new SelectObj(0, "0 pre ajax")); select1List.add(new SelectObj(1, "1 pre ajax")); select1List.add(new SelectObj(2, "2 pre ajax")); select1List.add(new SelectObj(3, "3 pre ajax")); select1List.add(new SelectObj(4, "4 pre ajax")); select1Model = new GenericSelectModel(select1List, SelectObj.class, "text", "id", propertyAccess); List<SelectObj> select2List = new ArrayList(); select2List.add(new SelectObj(0, "0 pre ajax")); select2List.add(new SelectObj(1, "1 pre ajax")); select2List.add(new SelectObj(2, "2 pre ajax")); select2List.add(new SelectObj(3, "3 pre ajax")); select2Model = new GenericSelectModel(select2List, SelectObj.class, "text", "id", propertyAccess); } public Object onValueChangedFromSelectValue1(SelectObj selectObj) { System.out.println("onValueChangedSelectValue1"); List<SelectObj> select2List = new ArrayList(); select2List.add(new SelectObj(4, "4 post ajax")); select2List.add(new SelectObj(5, "5 post ajax")); select2List.add(new SelectObj(6, "6 post ajax")); select2List.add(new SelectObj(7, "7 post ajax")); select2Model = new GenericSelectModel(select2List, SelectObj.class, "text", "id", propertyAccess); if(request.isXHR()) { return new MultiZoneUpdate("select1ValueZone", select1ValueZone.getBody()).add("select2ValueZone", select2ValueZone.getBody()); } else { return this; } } } Form.tml <body t:type="Layout" t:title="form" t:bodyId="formPage" xmlns:t=" http://tapestry.apache.org/schema/tapestry_5_1_0.xsd" xmlns:p="tapestry:parameter"> <form t:type="Form" t:id="form" t:clientValidation="false" action="#"> <select t:type="Select" t:id="selectValue1" t:validate="required" t:zone="select1ValueZone"/> <t:zone t:id="select1ValueZone" visible="false">Show</t:zone> <t:zone t:id="select2ValueZone"><select t:type="Select" t:id="selectValue2" t:validate="required"/></t:zone> </form> </body> JSON Response: {"content":"","zones":{"select2ValueZone":"<select id='selectValue2-127fe104b7d' name='selectValue2'><option value='4'>4 post ajax<\/option><option value='5'>5 post ajax<\/option><option value='6'>6 post ajax<\/option><option value='7'>7 post ajax<\/option><\/select> <input><\/input>","select1ValueZone":"Show"}}