日期:2014-05-18  浏览次数:20800 次

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 = '成功消息';
            }
        }
}