3.大区select和对应城市select:servlet

package com.bjpowernode.drp.statreport.web;

import java.io.IOException;
import java.io.StringWriter;
import java.util.Map;
import java.util.Set;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

import com.bjpowernode.drp.statreport.manager.StatReportManager;
import com.bjpowernode.drp.util.ApplicationException;
import com.bjpowernode.drp.util.BeanFactory;
import com.bjpowernode.drp.util.Constants;
import com.bjpowernode.drp.util.TransactionHandler;

@SuppressWarnings("serial")
public class StatReportServlet extends HttpServlet {
	
	 /** 
     * StatReportManager的代理类对象 
     */  
    private StatReportManager statReportManager;
    
    /** 
     * 创建servlet时会调用该方法 
     * 获取StatReportManager的代理类对象 
     */ 
    @Override
	public void init() throws ServletException {
		// 获取工厂  
    	BeanFactory beanFactory = (BeanFactory) this.getServletContext().getAttribute("beanFactory");
    	// 获取StatReportManager实现类对象  
    	statReportManager = (StatReportManager) beanFactory.getServiceObject(StatReportManager.class);
    	// 获取FlowCardManager代理类对象
    	TransactionHandler transactionHandler = new TransactionHandler();
    	statReportManager = (StatReportManager) transactionHandler.newProxyInstance(statReportManager);
	}
    
    @Override
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
    	
    	// 取得大区列表,装在map里,key:大区的id,value:大区的名字
    	if (request.getParameter("command").equals(Constants.GET_REGION)) {
    		getRegionList(request, response);
    	
    		// 根据大区id取得相应的市,装在map里,key:城市的id,value:城市的名字
		} else if (request.getParameter("command").equals(Constants.GET_CITY)) {
			getProvincesByRegionId(request, response);
		}
	}


	// 根据大区id取得相应的市,装在map里,key:城市的id,value:城市的名字(此servlet方法是ajax调用,因此servlet获取的值返回给javascript)
	private void getProvincesByRegionId(HttpServletRequest request,
			HttpServletResponse response) {
		
		response.setContentType("text/xml;charset=UTF-8");
		
		// 获取客户端传过来的大区id
		int regionId = Integer.parseInt(request.getParameter("regionId"));
		
		// key:城市的id,value:城市的名字
		Map<Integer, String> cities = null;
		
		/**
		 * regionId == 0,说明前台在大区select选择的是"--全部--"option,程序实际会去数据库
		 * 查找pid == 0的记录,而pid == 0的记录是"所有分销商",这不是我们想要的结果,所以应排除这种情况
		 */
		if (regionId == 0) {
			return;
		}
		
		try {
			// 调用statReportManager的方法,取得大区对应的城市,装在map里,key:城市的id,value:城市的名字
			cities = statReportManager.getProvincesByRegionId(regionId);
			
			// 城市map是要返回javascript,用XML的格式
			
			// 创建XML文档树
			Document document = DocumentHelper.createDocument();
			// 创建根节点items 
			Element itemsElement = document.addElement("items");
			
			// 遍历map(cities城市)
			Set<Map.Entry<Integer, String>> citySet = cities.entrySet();
			
			for (Map.Entry<Integer, String> city : citySet) {
				
				// 创建根节点下的item子节点 
				Element itemElement = itemsElement.addElement("item");
				
				// item节点有两个子节点(id,name)
				Element idElement = itemElement.addElement("id");
				idElement.setText(String.valueOf(city.getKey()));
				
				Element nameElement = itemElement.addElement("name");
				nameElement.setText(city.getValue());
			}
			
			// 设置XML文档格式,漂亮的格式
			OutputFormat outputFormat = OutputFormat.createPrettyPrint();
			// 设置XML编码方式,即是用指定的编码方式保存XML文档到字符串(String),这里也可以指定为GBK或是ISO8859-1
			outputFormat.setEncoding("UTF-8");
			
			 // stringWriter字符串是用来保存XML文档的  
			StringWriter stringWriter = new StringWriter();
			// xmlWriter是用来把XML文档写入字符串的(工具)
			XMLWriter xmlWriter = new XMLWriter(stringWriter, outputFormat);
			
			// 把创建好的XML文档写入字符串  
			try {
				xmlWriter.write(document);
				// 向浏览器输出字符串(如果是ajax访问此servlet的此方法,则是向javascript输出字符串)
				response.getWriter().print(stringWriter.toString());
				
				xmlWriter.close();
				
			} catch (IOException e) {
				e.printStackTrace();
				throw new ApplicationException("把XML文档写入字符串失败!");
			}
			
		} catch (ApplicationException e) {
			throw e;
		}
	}

	// 取得大区列表,装在map里,key:大区的id,value:大区的名字
	private void getRegionList(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		
		// 取得大区列表,装在map里,key:大区的id,value:大区的名字
		Map<Integer, String> regions = null;
		
		try {
			// 调用statReportManager的方法,取得大区列表,装在map里,key:大区的id,value:大区的名字
			regions = statReportManager.getRegionList();
			
		} catch (ApplicationException e) {
			e.printStackTrace();
			throw e;
		}
		
		request.setAttribute("regions", regions);
		request.getRequestDispatcher("/statreport/client_level_chart.jsp").forward(request, response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		doGet(request, response);	
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值