今天花了1下午時間研究出了ComboBox+Ajax+分頁聯動效果.ext學習初步見效
下面代碼直接就能運行,用list模擬了數據庫中取數據
以下是目錄結構
test1.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>測試1</title>
<link rel="stylesheet" href="../extjs/resources/css/ext-all.css" type="text/css"></link>
<link rel="stylesheet" type="text/css" href="../styles.css">
<script type="text/javascript" src="../extjs/ext-base.js"></script>
<script type="text/javascript" src="../extjs/ext-all.js"></script>
<script type="text/javascript" src="../extjs/ext-lang-zh_CN.js"></script>
<script type="text/javascript" src="test1/test1.js" charset="utf-8"></script>
</head>
<body>
</body>
</html>
?
?test1.js
Ext.onReady(function(){
//設置省份數據源storeProvinces
var storeProvinces = new Ext.data.Store({
proxy: new Ext.data.HttpProxy({url: "../ProvincesJsonServlet"}),
reader: new Ext.data.JsonReader({}, [
{name: "provincesId", type: "int", mapping: "provincesId"},
{name: "provincesName", type: "string", mapping: "provincesName"}
])
});
//創建組件comboProvinces,省份下拉框
var comboProvinces = new Ext.form.ComboBox({
renderTo: Ext.getBody(),
triggerAction: "all",
store: storeProvinces,
displayField: "provincesName",
valueField: "provincesId",
mode: "remote",
readOnly: true,
emptyText: "請選擇省份",
listeners:{
//監聽下拉選擇事件
select:function(combo,record,index){
//設置數據源
storeCities.proxy= new Ext.data.HttpProxy({url: "../CitiesJsonServlet?provincesId="+comboProvinces.getValue()});
//傳參start,limit
storeCities.load({params:{start:0,limit:5}});
//清空comboCities
comboCities.clearValue();
}
}
});
//設置城市數據源storeCities
var storeCities = new Ext.data.Store({
proxy: new Ext.data.HttpProxy(),
reader: new Ext.data.JsonReader({
totalProperty: "totalProperty", //總記錄數
root: "root" //所有的數據(json對象數組)
}, [
{name: "cityId", type: "int", mapping: "cityId"}, //設置名稱、類型、映射關系
{name: "cityName", type: "string", mapping: "cityName"}
])
});
//創建組件comboCities,城市下拉框
var comboCities = new Ext.form.ComboBox({
store: storeCities, //數據源
emptyText:'請選擇地區', //空值時顯示
mode: 'remote', //遠程數據
pageSize: 5, //分頁大小
triggerAction: 'all',
displayField: "cityName", //顯示值
valueField :"cityId", //實際值
renderTo: Ext.getBody(),
readOnly: true, //只讀
listWidth: 300 //下拉寬度
});
});
??web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>ProvincesJsonServlet</servlet-name>
<servlet-class>ajax.ProvincesJsonServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>CitiesJsonServlet</servlet-name>
<servlet-class>ajax.CitiesJsonServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ProvincesJsonServlet</servlet-name>
<url-pattern>/ProvincesJsonServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>CitiesJsonServlet</servlet-name>
<url-pattern>/CitiesJsonServlet</url-pattern>
</servlet-mapping>
</web-app>
?
?
ProvincesJsonServlet.java
package ajax;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ProvincesJsonServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//組合省份json
String provinces = "[{provincesId: 1,provincesName: '湖南'},{provincesId: 2,provincesName: '湖北'},{provincesId: 3,provincesName: '廣東'},{provincesId: 4,provincesName: '廣西'}]";
out.println(provinces);
out.flush();
out.close();
}
}
?
?
CitiesJsonServlet.java
package ajax;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CitiesJsonServlet extends HttpServlet {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
//獲取省份ID
int provincesId = 0;
if(request.getParameter("provincesId") != null)
provincesId = Integer.valueOf(request.getParameter("provincesId").toString());
//***************************設置分頁參數begin***************************
//分頁開始索引
int start = 0;
//頁大小
int limit = 5;
if(request.getParameter("start") != null)
start = Integer.parseInt(request.getParameter("start"));
if(request.getParameter("limit") != null)
limit = Integer.parseInt(request.getParameter("limit"));
//總記錄條數
int totalProperty = 0;
//***************************設置分頁參數end*****************************
//根據不同的省份ID,查找數據庫,查找出對應省份的城市
List citiseList = addCitiesList(provincesId);
//根據查找出來的結果,組合出分頁的json
String citiesJson = getCitiesJson(citiseList,start,limit);
out.println(citiesJson);
out.flush();
out.close();
}
/*
* 根據查找出來的結果,組合出分頁的json
* citiseList包含城市的數據源list
* start分頁開始索引
* limit頁大小
*/
public String getCitiesJson(List citiseList,int start,int limit){
StringBuffer citiesJson = new StringBuffer();
//end為本頁最后1項的下標 = 本頁第1項的下標 + 頁大小
int end = start + limit;
//如果end大于總個數的大小,將end=總個數的大小
if (end > citiseList.size()){
end = citiseList.size();
}
//假如citiseList沒有數據,直接返回空值,反之進行組合json
if(citiseList.size()>0){
citiesJson.append("{totalProperty: " + citiseList.size() + ", root:[");
for(int i = start; i < end; i ++){
citiesJson.append("{cityId: " + i + ",cityName: '" + citiseList.get(i).toString() + "'}");
if(i < end - 1){
citiesJson.append(",");
}else{
citiesJson.append("]}");
}
}
}
//最后返回的json格式
//{totalProperty: 8, root:[{cityId: 0,cityName: '長沙'},{cityId: 1,cityName: '株洲'},{cityId: 2,cityName: '湘潭'},{cityId: 3,cityName: '衡陽'},{cityId: 4,cityName: '常德'}]}
return citiesJson.toString();
}
/*
* 根據省份ID獲取城市 模擬查找數據庫
* provincesId省份id
*/
public List addCitiesList(int provincesId){
List citiseList = new ArrayList();
//1為湖南 2為湖北 3為廣東 4為廣西
if(provincesId == 1){
citiseList.add("長沙");
citiseList.add("株洲");
citiseList.add("湘潭");
citiseList.add("衡陽");
citiseList.add("常德");
citiseList.add("婁底");
citiseList.add("吉首");
citiseList.add("張家界");
citiseList.add("邵陽");
citiseList.add("岳陽");
citiseList.add("益陽");
citiseList.add("郴州");
citiseList.add("永州");
citiseList.add("懷化");
}else if(provincesId == 2){
citiseList.add("武昌");
citiseList.add("漢口");
citiseList.add("黃石");
citiseList.add("荊州");
citiseList.add("宜昌");
citiseList.add("襄樊");
citiseList.add("十堰");
}else if(provincesId == 3){
citiseList.add("深圳");
citiseList.add("廣州");
citiseList.add("東莞");
citiseList.add("惠州");
}else if(provincesId == 4){
citiseList.add("南寧");
citiseList.add("柳州");
citiseList.add("桂林");
citiseList.add("北海");
}
return citiseList;
}
}
?
運行后,頁面效果如下
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元

