尝试将文件发送到JSF中的浏览器时出现问题

时间:2010-05-20 06:44:21

标签: jsf download jsf-2

您好我尝试了两种不同的技术将文件发送到浏览器(让用户下载文件)。我试过myfaces wikipage的一个例子

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

    int read = 0;
    byte[] bytes = new byte[1024];

    String fileName = "test.txt";
    response.setContentType("text/plain");

    response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");

    OutputStream os = null;

    StringBuffer stringBuffer1 = new StringBuffer("Java Forums rock");
    ByteArrayInputStream bis1;
    try {
        bis1 = new ByteArrayInputStream(stringBuffer1.toString().getBytes("UTF-8"));

        os = response.getOutputStream();

        while ((read = bis1.read(bytes)) != -1) {
            os.write(bytes, 0, read);
        }

        os.flush();
        os.close();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    FacesContext.getCurrentInstance().responseComplete();

我也尝试过使用PrimeFaces中名为fileDownload的组件。两者都给出了相同的结果:

我从服务器得到响应,响应包含应该在文件中的文本。标题如下:

X-Powered-By    Servlet/3.0, JSF/2.0
Server  GlassFish v3
Content-Disposition attachment;filename="test.txt"
Content-Type    text/plain
Transfer-Encoding   chunked
Date    Thu, 20 May 2010 06:30:20 GMT

对我而言,这看起来是正确的但由于某种原因我无法下载文件,我只是在firebug中得到这个回复。

有没有人有任何想法?,它可能是一个服务器问题吗?我用glassfish 3

由于 / Stefan

1 个答案:

答案 0 :(得分:3)

听起来好像你是异步地(使用Ajax)而不是同步地请求它。当您这样做时,您确实永远不会看到另存为对话框。您应始终同步请求文件下载。即使用“普通香草”h:commandLinkh:commandButton代替某些ajaxical命令组件。