【问题标题】:Primefaces fileDownload - getOutputStream() has already been called for this responsePrimefaces fileDownload - 已为此响应调用 getOutputStream()
【发布时间】:2023-03-19 23:45:02
【问题描述】:

我正在使用 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;
        }

【问题讨论】:

    标签: java jsf-2 primefaces


    【解决方案1】:

    您在 bean 的构造函数中创建流,而不是在与 &lt;p:commandButton&gt; 关联的操作方法中。这些症状表明 bean 被放置在比请求范围更广的范围内。构造函数仅在 bean 的构造时调用,而不是在每个 HTTP 请求时调用。如果 bean 放在请求范围内,那么构造函数会在每个 HTTP 请求上调用。

    你有两个选择:

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

    2. 改为在操作方法中创建流并将其绑定到&lt;p:commandButton action&gt;

    【讨论】:

    • 拜托,你能举一个第二个解决方案的例子吗?
    【解决方案2】:

    您的页面中是否有多个&lt;p:filedownload/&gt; 标签(可能具有相同的绑定)?尝试在具有其他 ajax-y 功能的同一页面中使用多个启用 ajax 的 &lt;p:filedownload/&gt; 标记(绑定到支持 bean 中的不同属性)时,我遇到了 Primefaces 的问题。主要问题似乎是每个&lt;p:filedownload/&gt; 都绑定到同一个属性。我的项目需求发生了变化,不再需要 ajax 下载,所以我没有适合您的解决方案,但这可能会对您有所帮助。

    【讨论】:

    • 不,我没有多个 p:fileDownload,只有一个 p:fileDownload 和一个 p:fileUpload
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    相关资源
    最近更新 更多