当前位置: 首页 > 知识库问答 >
问题:

在getOutputStream()错误后无法调用getWriter()

宰父劲
2023-03-14

我使用的是my-faces 2.1.5 primefaces 3.2和WebLogic Server版本:10.3.2.0

当我生成文件并尝试通过p:filedownload下载它们时,我收到以下错误消息

java.lang.IllegalStateException: strict servlet API: cannot call getWriter() after getOutputStream()
at weblogic.servlet.internal.ServletResponseImpl.getWriter(ServletResponseImpl.java:309)
at org.apache.myfaces.context.servlet.ServletExternalContextImpl.getResponseOutputWriter(ServletExternalContextImpl.java:185)
at org.apache.myfaces.renderkit.ErrorPageWriter.handle(ErrorPageWriter.java:469)
at org.apache.myfaces.context.MyFacesExceptionHandlerWrapperImpl.handle(MyFacesExceptionHandlerWrapperImpl.java:301)
at javax.faces.context.ExceptionHandlerWrapper.handle(ExceptionHandlerWrapper.java:64)
at org.apache.myfaces.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:191)
at org.apache.myfaces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3592)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2202)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2108)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1432)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)

我不知道这是weblogic中的bug还是我的代码中的bug?

<p:commandButton id="genButton" value="Generate Files" disabled="#{bean.disableButton}" actionListener="#{bean.generate}" onclick="PrimeFaces.monitorDownload(showStatus, hideStatus)" ajax="false" style="width:200px" icon="ui-icon-shuffle">
        <p:fileDownload value="#{bean.zipfile}"/>  
        </p:commandButton> 

豆子:

     File zip = File.createTempFile(selectedCode, "zip");  

            ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zip.getPath()));  
            for (File file : adapter.listFiles) {  
                addFileToZip(file, zos);  
            }  

            InputStream in = new FileInputStream(zip);  
            file = new DefaultStreamedContent(in, "zip", selectedCode + ".zip");  
            adapter.listFiles.clear();  
            zos.flush();  
            zos.close(); 

共有1个答案

勾长卿
2023-03-14

stacktrace告诉MyFaces异常处理程序试图处理它。

at org.apache.myfaces.context.MyFacesExceptionHandlerWrapperImpl.handle(MyFacesExceptionHandlerWrapperImpl.java:301)
at javax.faces.context.ExceptionHandlerWrapper.handle(ExceptionHandlerWrapper.java:64)

只有在抛出异常时才会发生这种情况。但是该异常的异常细节显然会被抑制,因为MyFaces异常处理程序无法处理该异常,因为无法获得响应写入程序。

关闭MyFaces异常处理程序,您将获得真正的异常细节。

 类似资料:
  • 当我尝试使用Spring boot和Spring mvc下载压缩文件时,出现了一个错误: null 基本上,我的应用程序是加载一个文件,压缩它并下载新的压缩文件。 这是我的应用程序控制器: 如果我关闭输入和输出流,我不知道为什么会发生这种情况。

  • 问题内容: 我必须使用测试工具编译我的代码,但是,当该测试工具调用我的方法时,我收到此错误: “课程Course中的getCourseDetails方法不能应用于给定类型; 必需:java.lang.String,int,java.lang.String,boolean,java.lang.String.java.lang.String,double 找到:没有参数 原因:实际参数列表和形式参数列

  • 问题内容: 点更新后,点已完全停止工作。 有什么帮助吗? 编辑:我正在Windows 10 问题答案: 一切归功于han_solo用户,他将答案留为评论而不是答案: 代替 采用 替换为或使用所需名称的名称。

  • 我正在用Spring做一个项目,我有这个问题,我谷歌了错误信息,我找到了解决方案,甚至所有关于这个问题的帖子 有人能帮忙吗?

  • 问题内容: 有了一个有点烦人的提款机。我设法编写了以下代码,该代码从url下载JSON并将其显示在屏幕上: 但是 …这很奇怪,因为如果我想将接收到的json存储在状态对象的数据中,但是当我试图这样做时,它表示状态变量实际上不存在… 这是什么意思?由于它是 组件的WILL挂载 功能,因此状态尚不存在,所以这就是为什么我无法将接收到的数据存储在那里的原因? 有什么办法可以解决这个问题?非常感谢 PS

  • 每次我尝试处理我的/register方法时,我总是收到一个不能调用“com.***.repositories.userrepository.findByEmail(String)”的错误,因为“this.userrepository”是空错误。 我不明白为什么代码会被认为是空的。 控制器- Axios调用- 我的用户存储库-