当前位置: 代码迷 >> Ajax >> ext中ComboBox+Ajax+分页联动代码跟注释
  详细解决方案

ext中ComboBox+Ajax+分页联动代码跟注释

热度:509   发布时间:2012-10-25 10:58:57.0
ext中ComboBox+Ajax+分页联动代码和注释

今天花了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;
	}
}

?

运行后,页面效果如下



?

?

?

  相关解决方案