java - Primefaces fileDownload - 已经为此响应调用了 getOutputStream()

标签 java jsf-2 primefaces

我正在使用 Primefaces 文件下载。当我第一次启动应用程序时,文件已下载,但每次我按下下载按钮时,都会出现此错误:

java.lang.IllegalStateException: getOutputStream() has already been called for this response

我的 xhtml 代码:

   <p:commandButton value="Download" ajax="true">
         <p:fileDownload value="#{fileDownloadController.file}" />
   </p:commandButton> 

我的java代码:

        private StreamedContent file;

        public FileDownloadController() {
            InputStream stream = null;
            try {
                stream = FacesContext.getCurrentInstance().getExternalContext().getResourceAsStream("/Enastr1.txt");
                file = new DefaultStreamedContent(stream, "txt", "Downloaded_Enastr1");
            } catch (Exception ex) {
                Logger.getLogger(FileDownloadController.class.getName()).log(Level.SEVERE, null, ex);
            } finally {

            }
        }

        public StreamedContent getFile() {
            return file;
        }

        public void setFile(StreamedContent file) {
            this.file = file;
        }

最佳答案

您是在 bean 的构造函数中创建流,而不是在与 <p:commandButton> 关联的操作方法中创建流.症状表明 bean 放置在比请求范围更广的范围内。构造函数仅在 bean 构造时调用,而不是在每个 HTTP 请求时调用。如果将 bean 放入请求范围内,则在每个 HTTP 请求上调用构造函数。

你有两个选择:

  1. 将 bean 放入请求范围内。

  2. 改为在操作方法中创建流并将其绑定(bind)到 <p:commandButton action> .

关于java - Primefaces fileDownload - 已经为此响应调用了 getOutputStream(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7755493/

相关文章:

java - 智能逻辑查询 PostgreSQL 函数内部的性能

jsf - 如何在 p :inputTextarea Prime Faces? 中停用拼写检查

java - 在 Maven 项目中添加 Primefaces 引用?

jsf - 持久化由 JSF 组件转换器创建的 EJB 实体时如何避免重复的 DB 内容?

css - Primefaces 对话框滚动条未显示在标题下方

java - Primefaces java.lang.NullPointerException

jsf - 引用复合组件内部的组件(反之亦然)

java - 为什么我的生产者线程没有完成它的任务?

java - 如何在eclipse中反转 "disable check in this file only"?

java - 提交响应后如何解决无法调用 sendRedirect() 的问题?