Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
5.2.0
-
None
Description
The JSON response includes an extra input field after a select field when using a MultiZoneUpdate. The extra input is then showing up in the rendered page in the browser.
Example:
/*
- 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="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":
}