Warm tip: This article is reproduced from serverfault.com, please click

java-JavaBean中的XPages HttpServletResponse错误

(java - XPages HttpServletResponse Error In JavaBean)

发布于 2020-12-01 08:41:28

我正在将服务器上的文件下载到运行XPage的本地计算机上。但是,当我在Java Bean中调用简化此方法的方法时,会收到错误消息:java.lang.IllegalStateException: Can't get a Writer while an OutputStream is already in use

XPage代码

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:br></xp:br>
    <xp:br></xp:br>
    <xp:br></xp:br>
    <xp:button value="Download Test" id="button1">
        <xp:eventHandler event="onclick" submit="true"
            refreshMode="complete">
            <xp:this.script><![CDATA[#{javascript:FileDownload.sendFile("//local//notesdata//Shared//AFS//test.pdf");}]]></xp:this.script>
        </xp:eventHandler></xp:button></xp:view>

Java Bean代码

package pdf;

import java.io.*;

import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletResponse;

public class FileDownload 
{    
    public void sendFile(filePath) 
    {
        File file = new File(filePath);
        if (file.exists()) {
            ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext();
            HttpServletResponse response = (HttpServletResponse) ec.getResponse();
            response.setContentType("application/pdf"); // figure out the type from extension or else

            OutputStream out;
            try {
                // for the download dialog
                response.setHeader("Content-disposition","attachment; filename*=utf-8''" + java.net.URLEncoder.encode(file.getName(), "UTF-8").replace("+", "%20"));
                out = response.getOutputStream();
                FileInputStream in = new FileInputStream(file);
                byte[] buffer = new byte[4096];
                int length;
                while ((length = in.read(buffer)) > 0) {
                    out.write(buffer, 0, length);
                }
                in.close();
                out.flush();
            } catch (IOException e) {

            }
        }
    }
}
Questioner
Muhammed Ismail Carrim
Viewed
11
Per Henrik Lausten 2020-12-01 17:26:25

FacesContext.getCurrentInstance().responseComplete();在关闭/刷新OutputStream之前,请尝试添加