`
javaeye_hua
  • 浏览: 81606 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

prototype.js + json制作ajax

    博客分类:
  • Ajax
阅读更多
package com.automic.monitor.dailyWork.toExcel.amount.action;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import com.automic.monitor.remote.DataAmountVO;
import com.automic.monitor.power.util.Powers;
import com.automic.monitor.remote.busi.hisAmountData.* ;
import com.automic.monitor.dailyWork.toExcel.amount.busi.ToExcelAmountBusi;
import com.automic.monitor.dailyWork.toExcel.pvo.BackVO;
import com.automic.monitor.dailyWork.toExcel.util.ExcelUtil;
import com.automic.monitor.global.*;
import com.automic.monitor.util.CheckPowerAndSession;
import com.automic.monitor.util.Config;

public class ExcelAmountAction extends PagerAction {
	@SuppressWarnings("deprecation")
	public ActionForward execute(ActionMapping mapping, 
			ActionForm form,
			HttpServletRequest request,
			HttpServletResponse response) {
		try {
			response.setContentType("text/xml;charset=GBK");
			response.setCharacterEncoding("GBK");
			PrintWriter out = response.getWriter();
			// ////////////////////
			
			String fountId = request.getParameter("fountId");
			String gprsId = request.getParameter("gprsId");
			String typeId = request.getParameter("typeId");
			String startDt = request.getParameter("startDt");
			String startHou = request.getParameter("startHou");
			String endDt = request.getParameter("endDt");
			String endHou = request.getParameter("endHou");
			String reName = request.getParameter("reName");
			reName = new String(reName.getBytes("ISO8859-1"),"utf-8");
			
			PagerQuery query = createQuery(fountId,gprsId,typeId,startDt,startHou,endDt,endHou);
			// 得到纪录总数目
			ArrayList<DataAmountVO> li = this.queryItems(query,0,0);
			//////start to excel//////
			String message = "";
			String savePath = Config.getConfig(Config.amountExcelDir);
			String excelName = null;
			if(reName != null && !reName.equals("")){
				excelName = reName + ".xls";
			}else{
				excelName = this.buildExcelName(startDt,startHou,endDt,endHou);
			}
			
			ExcelUtil exUtil = ExcelUtil.getInstance();
			BackVO bvo = new BackVO();
			
			if(exUtil.isExist(savePath, excelName)){//如果此文件名已经存在,提示
				message = excelName + "已经存在!!!";
				bvo.setMessage(message);
				bvo.setFiles(exUtil.getFiles(savePath));
				JSONObject jobj = new JSONObject();
				jobj.put("jobj", bvo);
				out.print(jobj.toString());
				out.flush();
				out.close();
				return null;
			}
			/////////
			try{
				ArrayList<String> headerLis = new ArrayList<String>(0);//头栏目内容
				headerLis.add("矿泉名称");
				headerLis.add("工程名称");
				headerLis.add("瞬时流量(m3/d)");
				headerLis.add("累计流量(m3)");
				headerLis.add("温度(℃)");
				headerLis.add("水位(mm)");
				headerLis.add("电源工作状态");
				headerLis.add("蓄电池工作状态");
				headerLis.add("测控器工作模式");
				headerLis.add("上报时间");
				ArrayList<ArrayList<Object>> contentLlis = new ArrayList<ArrayList<Object>>(0);//excel文件内容
				for(int i = 0; li != null && i < li.size();i++){
					DataAmountVO vo = li.get(i);
					ArrayList<Object> temp = new ArrayList<Object>(0);
					temp.add(vo.getFountName());
					temp.add(vo.getProjectName());
					temp.add(vo.getInstantFlux());
					temp.add(vo.getAccumuFlux());
					temp.add(vo.getWaterRemain());
					temp.add(vo.getWaterLevel());
					temp.add(vo.getPowerStatus().replaceAll("<font color='#FF0000'>","").replaceAll("</font>", ""));
					temp.add(vo.getStorePowerVoltStatus().replaceAll("<font color='#FF0000'>","").replaceAll("</font>", ""));
					temp.add(vo.getMeterModel().replaceAll("<font color='#FF0000'>","").replaceAll("</font>", ""));
					temp.add(vo.getDateTime());
					
					contentLlis.add(temp);
				}
				
				exUtil.createBookSheet(savePath + excelName, "sheet1", 0);//构建excel模板
				exUtil.buildHeader(headerLis);//构建excel标题栏
				exUtil.buildContent(contentLlis);
				exUtil.closed();
				message = "导出" + excelName + "成功!!!";
			}catch(Exception e){
				e.printStackTrace();
				message = "导出文件时出错!!!";
			}finally{;}
			// 保存,返回
			 
			bvo.setMessage(message);
			bvo.setFiles(exUtil.getFiles(savePath));
			JSONObject jobj = new JSONObject();
			jobj.put("jobj", bvo);
			out.print(jobj.toString());
			out.flush();
			out.close();
			
			return null;
			
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		return null;
	
	}
	
	/**
	 * 
	 * @param form
	 * @return
	 */
	public PagerQuery createQuery(String fountId,String gprsId,String typeId,String startDt,String startHou
			,String endDt,String endHou) {
		PagerQuery query = new PagerQuery();
		query.set("fountId" , fountId) ;
		query.set("typeId" , typeId) ;
		query.set("gprsId" , gprsId) ;
		query.set("startDt" , startDt) ;
		query.set("startHou" , startHou) ;
		query.set("endDt" , endDt) ;
		query.set("endHou" , endHou) ;
		return query ;
	}
	@Override
	public PagerQuery createQuery(PagerForm form) {
		// TODO Auto-generated method stub
		return null;
	}

	/**
	 * @param form
	 * @return构建excel文档名称
	 */
	private String buildExcelName(String startDt,String startHou,String endDt,String endHou){
		String name = "水量(" + startDt + startHou + "-" + endDt + endHou+ ")";
		name += ".xls";
		return name;
	}

	/**
	 * 
	 * @param form
	 * @return
	 */
	public PagerQuery createQuery( PagerForm form , String userRoleId) {
		return null ;
	}

	/**
	 * 得到总数
	 * @param query
	 * @return
	 */
	public int getItemTotal(PagerQuery query) {
		return new HisDataSearch().getTotalHisData(query) ;
	}

	/**
	 * 查询
	 */
	public ArrayList<DataAmountVO>  queryItems(PagerQuery query,int start,int count) {
		return new ToExcelAmountBusi().getHisdataAmount(query);
	}

	/**
	 * 把不同矿泉分组
	 * 
	 * @return
	 */
	private ArrayList<ArrayList<DataAmountVO>> cutListByFount(ArrayList<DataAmountVO> list) {
		ArrayList<ArrayList<DataAmountVO>> l = new ArrayList<ArrayList<DataAmountVO>>();
		if (list == null || list.size() == 0) {
			return l;
		} else {
			while (list != null && !list.isEmpty()) {
				ArrayList<DataAmountVO> lv = new ArrayList<DataAmountVO>();
				DataAmountVO first = list.get(0);
				lv.add(first);
				list.remove(0);
				for (int i = 0; i < list.size(); i++) {
					DataAmountVO temp = ((DataAmountVO) list.get(i));
					if (temp.getFountName().equals(first.getFountName())) {
						lv.add(temp);
						list.remove(i);
						i--;
					}
				}
				l.add(lv);
			}
			return l;
		}
	}

}
function exportExcel(dataType){
	var fountId = document.getElementById("fountId").value;
	var gprsId = document.getElementById("gprsId").value;
	var startDt = document.getElementById("startDt").value;
	var startHou = document.getElementById("startHou").value;
	var endDt = document.getElementById("endDt").value;
	var endHou = document.getElementById("endHou").value;
	var reName = document.getElementById("reName").value;
	var url = "";
	var params = "fountId=" + fountId + "&gprsId=" + gprsId
					+ "&startDt=" + startDt + "&startHou=" + startHou 
					+ "&endDt=" + endDt + "&endHou=" + endHou + "&reName=" + reName;
	if(dataType == 'amount'){
		var typeId = document.getElementById("typeId").value;		
		url = "excelAmountAction.do";
		params += "&typeId=" + typeId;
	}
	if(dataType == 'quality'){
		url = "excelQualityAction.do";	
	}
	var ajax = new Ajax.Request(url,{method:"get",parameters:params,onLoading:load,onComplete:complete});
	//loading function 
	function load(){
		var loadDiv = document.getElementById("load");
		var button = document.getElementById("excelButton");
		if(loadDiv != null && loadDiv != undefined){
			button.disabled = true;
			loadDiv.style.display = "";
			loadDiv.innerHTML = "<img src=\"images/loading5.gif\"/>正在导出excel文件,请稍等...";
		}
	}
	function complete(response){//call back function
		var loadDiv = document.getElementById("load");
		loadDiv.style.display = "none";
		var xml = response.responseText;
		var objs = eval('(' + xml + ')');
		var obj = objs.jobj;
		var alt = obj.message;
		var fobjs = obj.files;
		var tbDiv = document.getElementById("excelFile");
		var tb = new Array();
		tb.push("<table width=\"100%\">");
		tb.push("<tr>");
		tb.push("<td width=\"5%\">");
		tb.push("&nbsp;");
		tb.push("</td>");
		tb.push("<td width=\"85%\">");
		tb.push("文件名称");
		tb.push("</td>");
		tb.push("<td width=\"10%\">");
		tb.push("下载");
		tb.push("</td>");
		tb.push("</tr>");
		for(var i = 0;fobjs != null && i < fobjs.length;i++){
			var file = fobjs[i];
			var fName = file.name;
			var fPath = file.path;
			tb.push("<tr>");
			tb.push("<td>");
			tb.push("<img src=\"images/excel.jpg\">");
			tb.push("</td>");
			tb.push("<td>");
			tb.push(fName);
			tb.push("</td>");
			tb.push("<td>");
			tb.push("<a href=\"downloadAction.do?fileName=" + fPath + "\">")
			tb.push("<img src=\"images/download.gif\">");
			tb.push("</a>");
			tb.push("</td>");
			tb.push("</tr>");
		}
		tb.push("</table>");
		tbDiv.innerHTML = tb.join("");
		//返回信息提示
		alert(alt);
		document.getElementById("excelButton").disabled = false;
	}
}

 

附注:关于prototype.js +ajax 中文乱码问题,在action中标注:

  request.setCharacterEncoding("GBK");
  response.setContentType("text/xml;charset=GBK");
在得到参数后需要转码,从提交页面编码格式转成ajax编码格式(utf-8)
  
  String city = request.getParameter("city");//获得城市名称
  city = new String(city.getBytes("GBK"),"UTF-8");

分享到:
评论

相关推荐

    json.js,json2.js,json.jar,prototype.js,prototype.chm

    其中,JSON支持是Prototype库的一部分,它允许开发者轻松地进行JSON数据的处理,与json.js和json2.js类似,但它是作为更全面的JavaScript工具集的一部分。 5. prototype.chm:CHM是Microsoft的 Compiled HTML Help ...

    prototype.js 1.6中文手册、prototype.js 1.6英文手册、

    Prototype.js 1.6中的AJAX(异步JavaScript和XML)功能大大简化了与服务器的通信。`Ajax.Request`和`Ajax.Updater`是核心组件,前者用于发送请求,后者用于更新页面的一部分。它们都支持多种HTTP方法(GET、POST等...

    prototype.js简介

    3. **Ajax** - prototype.js 改进了原始的XMLHttpRequest对象,提供了`Ajax`模块,包含`Ajax.Request`和`Ajax.Updater`等类,使异步数据交换更加简单和灵活。 4. **事件处理** - 库中的`Event.observe()`和`Event....

    Ajax + JSON + Servlet + prototype.js(实现的一个Ajax实例)

    在这个Ajax实例中,前端使用Prototype.js发起Ajax请求,向服务器发送JSON数据,或者接收服务器返回的JSON数据。由于JSON是JavaScript的一部分,因此在JavaScript中解析JSON数据非常直观,这使得前后端之间的数据交换...

    prototype.js

    2. **Ajax**:Prototype.js提供了一套完善的Ajax解决方案,包括`Ajax.Request`和`Ajax.Updater`,使得异步数据交互更为简单,同时支持JSON、XML等多种数据格式。 3. **事件处理**:Prototype.js通过`Event.observe...

    prototype.js javaScript插件

    - **JSON支持**:Prototype.js提供了`toJSON`方法,可以将JavaScript对象转换为JSON字符串,便于与服务器进行数据交换。 ### 3. Prototype.js的事件处理 - **事件委托**:Prototype.js支持事件委托,允许在一个...

    prototype.js 1.4版开发者手册(强烈推荐)

    3. **Ajax支持**:Prototype.js提供了强大的Ajax功能,包括`Ajax.Request`和`Ajax.Updater`等,它们允许开发者轻松实现页面的异步更新,无需刷新整个页面,从而提高用户体验。 4. **事件处理**:库中包含了事件绑定...

    prototype.js.cn.doc.rar

    2. **JSON处理**:Prototype.js内置了JSON支持,提供了`JSON.parse()`和`JSON.stringify()`方法,方便JSON数据的序列化和反序列化。 3. **特效与动画**:Prototype.js的Effect模块提供了一系列动画效果,如淡入淡出...

    javascript类库prototype.js

    7. **JSON支持**:随着JSON成为数据交换的主流格式,Prototype.js 提供了JSON的解析和序列化功能,简化了数据的处理过程。 8. **实用工具**:Prototype.js 还包含许多实用工具函数,如`$()`用于快速获取DOM元素,`$...

    prototype.js 以及 找到的 相关使用详细说明

    Prototype.js是一个广泛使用的JavaScript库,它为JavaScript语言增加了许多实用功能,尤其在处理DOM操作、Ajax交互以及类(class)系统等方面提供了强大的支持。这个库的名字“Prototype”来源于JavaScript中的一个...

    Prototype.js 1.6.0.3 及中文CHM帮助文档

    Prototype.js 是一个广泛使用的JavaScript库,它为JavaScript编程提供了丰富的功能和便利,旨在简化和优化在浏览器环境中进行的脚本编写。1.6.0.3 版本是该库的一个稳定版本,它包含了对先前版本的改进和修复,以...

    prototype.js开发者手册

    4. **Ajax交互**:Prototype.js封装了Ajax请求,通过`Ajax.Request`和`Ajax.Updater`对象,可以实现与服务器的异步数据交换,大大简化了Web应用的动态更新。 5. **事件处理**:通过`Event.observe()`和`Event.stop...

    ajax:prototype.js很全的手册

    Prototype.js是一个JavaScript库,它为Web开发提供了丰富的功能,特别是针对Ajax交互。Ajax,即异步JavaScript和XML,是一种在不刷新整个页面的情况下更新部分网页内容的技术。Prototype.js通过简化DOM操作、事件...

    prototype.js框架资料

    Prototype.js是一个轻量级的JavaScript库,主要由Sam Stephenson开发,旨在简化DOM操作,提供面向对象的编程支持,并优化JavaScript的一些常见任务。它以其强大的功能和良好的性能,在Web开发领域得到了广泛应用。在...

    prototype.js 1.4版开发者手册

    Prototype.js 是一个强大的JavaScript框架,它为DOM操作、事件处理、AJAX交互等提供了便利的API,极大地提高了开发效率。手册详细介绍了这个库的功能和用法,以下是基于该手册的一些关键知识点的深入解析。 1. **...

    prototype.js1.6的帮助文档

    Prototype.js 是一个流行的JavaScript库,由Sam Stephenson创建,旨在简化DOM操作、事件处理、Ajax交互以及对象扩展等任务。在Prototype.js 1.6版本中,它提供了一系列高效且功能强大的工具,帮助开发者更高效地编写...

    prototype.js 1.4版开发手册

    8. **JSON支持**:Prototype包含了JSON(JavaScript Object Notation)的支持,提供`Object.toJSON`和`String.fromJSON`方法,方便JSON数据的序列化和反序列化。 9. **Ajax缓存**:Prototype的`Ajax.CachedRequest`...

    Prototype-1.6.0 中文版\英文版\Prototype.js

    Prototype.js 是一个广泛使用的JavaScript库,它为JavaScript语言增加了许多实用的功能,使开发Web应用程序变得更加简单。这个压缩包包含了Prototype的1.6.0版本,包括中文版和英文版的文档,以及源代码文件。 首先...

Global site tag (gtag.js) - Google Analytics