今天花了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元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
