源码如下:
AJAXSelect1.java
/**
* 项目名称:TapestryStart
* 开发模式:Maven+Tapestry5.x+Tapestry-hibernate+Mysql
* 网址:
http://www.flywind.org
* 版本:1.0
* 编写:飞风
* 时间:2012-02-29
*/
package com.tapestry.app.pages;
import org.apache.tapestry5.ComponentResources;
import org.apache.tapestry5.annotations.InjectComponent;
import org.apache.tapestry5.annotations.InjectPage;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.corelib.components.Zone;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.apache.tapestry5.services.Request;
public class AJAXSelect1 {
static final private String[] ALL_MAKES = new String[] { "梅州市", "河源市" };
static final private String[] NO_MODELS = new String[] {};
static final private String[] MEIZHOU_MODELS = new String[] { "五华县", "兴宁县"};
static final private String[] HEYUAN_MODELS = new String[] { "紫金县", "龙川县" };
@Property
private String areaMake;
@Property
private String cithModel;
@Property
private String keywords;
@Property
private String[] areaMakes;
@Property
@SuppressWarnings("unused")
private String[] cithModels;
@InjectPage
private AJAXSelect2 page2;
@InjectComponent
private Zone cithModelZone;
@Inject
private ComponentResources componentResources;
@Inject
private Request request;
void setupRender() {
if (areaMakes == null) {
areaMakes = ALL_MAKES;
cithModels = NO_MODELS;
}
}
Object onValueChangedFromAreaMake(String areaMake) {
this.areaMake = areaMake;
areaMakes = ALL_MAKES;
if (areaMake == null) {
cithModels = NO_MODELS;
}
else if (areaMake.equals(areaMakes[0])) {
cithModels = MEIZHOU_MODELS;
}
else if (areaMake.equals(areaMakes[1])) {
cithModels = HEYUAN_MODELS;
}
else {
cithModels = NO_MODELS;
}
cithModel = null;
return request.isXHR() ? cithModelZone.getBody() : null;
}
Object onSuccess() {
page2.set(areaMake, cithModel, keywords);
componentResources.discardPersistentFieldChanges();
return page2;
}
Object onGoHome() {
componentResources.discardPersistentFieldChanges();
return Index.class;
}
}
AJAXSelect1.tml
<html t:type="layout" title="tapestryStart Index" t:sidebarTitle="Framework Version"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd" xmlns:p="tapestry:parameter">
<form t:type="form" t:id="searchCriteria">
<t:label for="areaMake"/>:
<select t:type="select" t:id="areaMake" t:model="areaMakes" t:zone="cithModelZone"
t:blankOption="ALWAYS" t:blankLabel="请选择" t:validate="required"/>
<t:zone t:id="cithModelZone" id="cithModelZone" style="display: inline;">
<t:label for="cithModel"/>:
<select t:type="select" t:id="cithModel" t:model="cithModels"
t:blankOption="ALWAYS" t:blankLabel="请选择" t:validate="required"/>
</t:zone>
说明: <input t:type="TextField" t:id="keywords"/> (optional)<br/>
<input type="submit" value="提交"/>
<t:errors/>
</form><br/>
</html>
AJAXSelect2.java
/**
* 项目名称:TapestryStart
* 开发模式:Maven+Tapestry5.x+Tapestry-hibernate+Mysql
* 网址:
http://www.flywind.org
* 版本:1.0
* 编写:飞风
* 时间:2012-02-29
*/
package com.tapestry.app.pages;
import org.apache.tapestry5.PersistenceConstants;
import org.apache.tapestry5.annotations.Persist;
import org.apache.tapestry5.annotations.Property;
public class AJAXSelect2 {
@Persist(PersistenceConstants.FLASH)
@Property
@SuppressWarnings("unused")
private String areaMake;
@Persist(PersistenceConstants.FLASH)
@Property
@SuppressWarnings("unused")
private String cithModel;
@Persist(PersistenceConstants.FLASH)
@Property
@SuppressWarnings("unused")
private String keyWords;
public void set(String areaMake, String cithModel, String keyWords) {
this.areaMake = areaMake;
this.cithModel = cithModel;
this.keyWords = keyWords;
}
}
AJAXSelect2.tml
<html t:type="layout" title="tapestryStart Index" t:sidebarTitle="Framework Version"
xmlns:t="http://tapestry.apache.org/schema/tapestry_5_3.xsd" xmlns:p="tapestry:parameter">
您选择的地区是: ${areaMake} ${cithModel} ${keyWords}!<br/><br/>
</html>