第三十八讲:tapestry Ajax 关联下拉选框(select)组件

源码如下:

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>

转载于:https://my.oschina.net/shootercn/blog/55513

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值