Grails导出csv格式的文件

grails让csv报表的导出变得简单,如果是以前的SSH,这个操作就麻烦的多了,grails导出csv的原理其实就是运用消息头和ContentType,前端部分就是用jquery和一个jquery插件就OK了

1.csv导出前台界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>

 <script type="text/javascript" src="/easyui/jquery-1.8.0.min.js"  ></script>
<script type="text/javascript" src="/js/jquery.count_down_2.0.js"></script>
<script type="text/javascript">
  $("document").ready(function(){
	 
  });
  var intervalId;
  function intervaReportHandlerTag(){
         intervalId = setInterval("searchReportHandlerTag()",5000);
  }

  function loadout(){
	 
       intervaReportHandlerTag();
       //$("#sub").attr("disabled", "disabled");
          $('#sub').countDownInit(180, '导出结束', function() {
  				$('#sub').countDownStop();
  				alert('网络超时,请稍后再试!');
  			}, null, null, '导出中 ');
  			
          var that=$("#sub");
           $("#form").submit();
           $('#sub').countDownStart();
  	}

  //报表处理完成标识
  function searchReportHandlerTag(){
	 
      $.post("/excelExport/searchReportHandlerTag",null,function(res){
           if(res.flag){
        	 
               $('#sub').countDownStop();
               $("#sub").removeAttr("disabled");
               $('#sub').val("导出为excel");
               clearInterval(intervalId);
           }
      },'json');
  }
</script>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>导出csv</title>
</head>
<body>
  <form id="form" action="/excelExport/exportExcel" method="POST">
    输入信息:<textarea rows="3" cols="40" name="message"></textarea><br/>
    <input type="button" id="sub" value="导出为excel" οnclick="loadout()"/>
  </form>
</body>
</html>

界面如下:

2.控制器里的导出方法和导出状态获取的代码

def exportExcel={
		session.loadOver=false
		response.setContentType("text/csv");
		response.setContentType("application/csv;charset=GBK");
		response.setHeader("Content-Disposition", "attachment;FileName=test.csv");
		OutputStream out = null;
		try {
			//out = new FileOutputStream(new File("d:\\text.csv"));
			out=response.getOutputStream();
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		StringBuffer head = new StringBuffer();
		head.append("歌手名称,歌曲");
		head.append("\n");
		out.write(head.toString().getBytes("GBK"));
		out.flush();
		def sp=params.message.split(";");
		def buf=new StringBuffer();
		for(int i=0;i<sp.length;i++){
			
			def sp2=sp[i].split(",");
			
			def bf=new StringBuffer();
		  
			bf.append("\""+sp2[0]+"\"");
			bf.append(",\""+sp2[1]+"\"");
		
			bf.append("\n");
			
			buf.append(bf.toString());
			
		}
		out.write(buf.toString().getBytes("GBK"));
		out.flush();
		out.close();
		session.loadOver=true;
		
	}
	//导出标识
	def searchReportHandlerTag = {
		JSONObject json=new JSONObject()
		if(session.loadOver){
		}else{
			session.loadOver=false;  //如果null定义为已处理完
		}
		json.put("flag", session.loadOver);
		render json.toString()
	}

最后来看下,导出时的效果

csv显示如下所示:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值