现在想做一个把表格导出成excel的操作,不知道后台该怎么写,以及前台该怎么调用,能否简单指点下?
21 回复
@wendal 是的,就是页面上的一个table,我就是不太清楚后台怎么写,以及前台该怎么去接收后台返回的数据。。。
提供个思路咯:
先用js把table变成一个string[X][Y]
, 然后转为json,
$.ajax({
url : ...
data : JSON.stringify(tablelist),
});
服务器接收:
@AdaptBy(type=JsonAdaptor.class)
public void xxx(@Param("..")String[][] list, HttpServletRequest req) {
// 然后操作poi生成xls
}
@wendal 后台方法不用写一个OK(“raw”)这样的注解吗?我就是这里不太明白,其实怎么获取数据,已经poi什么的我都知道,就是不知道后台跟前台怎么交互。。。怎么能一调用后台的方法之后,然后前台就会弹出那个下载的提示框。。。
ajax的话并不会弹框, 需要iframe之类的
至于服务器端要做的,只是在resp的header里面放一个 Content-Disposition , 可以参考RawView类实现文件下载的代码
入口方法可以直接声明HttpServletResponse resp参数,然后你想怎么玩就怎么玩
@wendal 没有太明白你说的需要iframe是什么意思。能简单讲一下吗?确实,我这个肯定得用ajax去获取数据,然后返回要下载的excel文件流或者其他格式,而且是不是还得在服务器的某个位置上生成这个文件呢?
@wendal 兽总,想问下,RawView在哪个下面啊?我去好好看看先,如果有不懂的我再问你好了~
@IocBean
@At("/download")
@Ok("raw:stream")
@Fail("http:500")
public class DownloadModule {
@At
@Ok("raw:stream")
public void down(HttpServletResponse response) throws Exception{
File f = new File("d://undo.png");
InputStream is = new FileInputStream(f);
OutputStream os = response.getOutputStream();
os = new FileOutputStream(f);
byte[] buffer = new byte[400];
int length = 0;
while ((length = is.read(buffer)) > 0) {
os.write(buffer, 0, length);
}
os.close();
}
}
页面调用代码:
<title>项目库列表</title>
</head>
<body class="pos-r">
<a href="<%=basePath%>download/down">点击下载</a>
</body>
</html>
下载倒是自动下载了,但是不是那个图片的格式。。。
@wendal 在最上面还是在入口方法那里呢?
@wendal 好的,兽总,最后还是想问一下,我在那个ajax里面怎么用你说的那个iframe呢?能指点下吗?
@crskyp 嗯,我用的方法就是你说的那种方法,但是我得在ajax里面操作,就是不知道该怎么弹出那个提示下载的框
重点关注下Content-Disposition,搜索下
response.addHeader("Content-Disposition", "attachment; "+fileNameKey+"=\"" + realFileName + "\"");
@crskyp 谢谢大神拉,我已经按照这种方式解决了~~~
添加回复
请先登陆