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显示如下所示: