JSP和Servlet高手的请进~~万分紧急
我所做的项目的需求是这样的: A.JSP(包含Frame)画面上有一个按钮(exportData),点击这个按钮用来把画面上的表格内容以CSV文件的格式输出到客户端。输出的路径是 用户自己的指定的本地磁盘上的任意位置。输出成功后在 A.JSP上显示信息(输出成功)。我是这样实现的。
1.在JSP页面上用JavaScript转向到Servlet处理输出业务。
2.servlet处理完了以后,返回到给 A.JSP,并显示输出成功的信息,否则就显示失败的信息。
3.我的输出处理是直接写在doPost()方法中,
PrintWriter out = response.getWriter();
out.print(“”);
.....
.....
.....
.....
out.flush();
out.close();// 在此处,画面会弹出文件保存对话框,用户选择路径和输入文件名。文件保存。
我的问题是 我现在想要跳转到A.jsp怎么跳转?
1.用response.sendRedirect("/A.jsp");写在out.close() 后面肯定是不行,那样根本不能跳转,要是写在out.print() 前 面 根本就不会出文件保存的对话框,不能保存文件。
2.用request.getRequestDispatcher(URL).forward(request,response); 转向更不行,因为目标页面是含有Frame的JSP页面。
今天查了一天了,也没有个结果,不知道这里有没有高手帮忙解决下,万分感谢啦~~~~~~~~~~~~~~~~~~~~~~~~~
------解决方案--------------------
在out.close()后面在redirect是肯定不行的,因为页面已经输出了,不允许你跳转。
一种变通的方法是你先生成输出到临时文件,成功后再跳转到一个页面显示输出成功,并提供一个链接指向临时文件。
------解决方案--------------------
既然可以用js那我就贴个ajax的代码给你,以前项目也有这个问题,解决方案不只这一种,不过这个方法还不错。
用之前要导入prototype.js ,去官方下就行了。
JScript code
function download(styleId){
// 这里写你的servlet url
var url = '<%=request.getContextPath()%>/formStyleSearchAction.do';
// 没有参数为空
var pars = 'operation=isFormStyleExist&styleId='+styleId;
new Ajax.Request (
url,
{
method:'post',
parameters:pars,
onComplete:showResponse
});
function showResponse(res) {
if(res.responseText == 'failure'){
// 错误消息
res.innerHTML = '错误消息';
} else {
res.innerHTML = '成功消息';
}
}
}