通过JSF操作方法下载Excel文件会导致在前面添加一些奇怪的字符,并附加完整的JSP页面

通过JSF操作方法下载Excel文件会导致在前面添加一些奇怪的字符,并附加完整的JSP页面,excel,jsf,download,Excel,Jsf,Download,我正在使用JSF,在一个托管bean(视图范围)中,我有一个方法: public String viewReport() { HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse(); response.setContentType("application/vnd.ms-ex

我正在使用JSF,在一个托管bean(视图范围)中,我有一个方法:

public String viewReport() {

        HttpServletResponse response = (HttpServletResponse) FacesContext.getCurrentInstance().getExternalContext().getResponse();

        response.setContentType("application/vnd.ms-excel");
        response.setHeader("Content-Disposition","attachment;filename=book1.xls");

        try {
            File file = new File("C:\\soheb\\book1.xls");
            FileInputStream fileIn = new FileInputStream(file);
            ServletOutputStream out = response.getOutputStream();

            byte[] outputByte = new byte[4096];
            //copy binary contect to output stream
            while(fileIn.read(outputByte, 0, 4096) != -1)
            {
                out.write(outputByte, 0, 4096);
            }
            fileIn.close();
            out.flush();
            out.close();
        }
        catch(IOException e) {
            e.printStackTrace();
        }
        return null;
}
正在检索的excel文件已损坏。它上面有一些奇怪的字符,下面是整个JSP代码。我甚至还尝试了contenttype的application/octetstream

我用一个纯文本文件尝试了同样的方法,我能够通过它打开它

请帮我解决这个问题,提前谢谢

上面有一些奇怪的字符

你需要事先准备好

response.reset();
另一个可能的原因是正在保存的文件本身已损坏。例如,使用
写入程序
而不是
输出流
保存


下面是JSP的完整代码

您需要这样做,以便它在调用action方法后不会执行其默认导航和呈现响应作业

context.responseComplete();
另见:
上面有一些奇怪的字符

你需要事先准备好

response.reset();
另一个可能的原因是正在保存的文件本身已损坏。例如,使用
写入程序
而不是
输出流
保存


下面是JSP的完整代码

您需要这样做,以便它在调用action方法后不会执行其默认导航和呈现响应作业

context.responseComplete();
另见: