Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSF文件下载-游标保持忙碌,好像在等待响应_Jsf_Jsf 2 - Fatal编程技术网

JSF文件下载-游标保持忙碌,好像在等待响应

JSF文件下载-游标保持忙碌,好像在等待响应,jsf,jsf-2,Jsf,Jsf 2,我有以下JSF下载方法。一切正常:下载框出现,文件下载到我选择的目录后,页面上的光标保持忙碌,好像在等待响应。因此,我无法单击页面上的任何元素 public void download()throwsIOException{ FacesContext con = FacesContext.getCurrentInstance(); ExternalContext ex = con.getExternalContext(); File file = new File(DIR

我有以下JSF下载方法。一切正常:下载框出现,文件下载到我选择的目录后,页面上的光标保持忙碌,好像在等待响应。因此,我无法单击页面上的任何元素

public void download()throwsIOException{
    FacesContext con = FacesContext.getCurrentInstance();
    ExternalContext ex = con.getExternalContext();
    File file = new File(DIRECTORY_PATH_HERE + FILENAME_BERE);

    ex.responseReset();
    ex.setResponseContentType("application/octet-stream");

    try {
        ex.setResponseContentLength((int)file.length());
    } catch (IOException e) {
        e.printStackTrace();    
    }

    ex.setResponseHeader("Content-Disposition", "attachment; filename=\"" + FILE_NAME + "\"");


    final HttpServletResponse res = (HttpServletResponse)excon.getResponse();
    ServletOutputStream out = res.getOutputStream();

    FileInputStream fs = new FileInputStream(file); 
    byte[] buf = new byte[ifs.available()];
    int i = 0;

    while((i = fs.read(buf)) != -1){
        out.write(buf);
    }


    out.flush();
    out.close();
    fs.close();
    fc.responseComplete();
}

如果您使用的是JSF,我强烈建议您包括实用程序库omnifaces,这将使您的生活更轻松您的示例如下

public void download() throws IOException {
    Faces.sendFile(file, true);
}

你也可以发布jsf部分吗