Java 在JSF中将XML文件集下载为zip文件

Java 在JSF中将XML文件集下载为zip文件,java,jsf,Java,Jsf,我有一个字符串数组,其中每个字符串都包含一些xml内容。我必须将每个字符串放入一个文件中,最后必须将所有xml作为zip文件下载 我们如何使用JSF实现它 示例代码: String content="<?xml version="1.0" encoding="UTF-8"?> <Head> <Car> <model>i10</command> <price></target> </car&

我有一个字符串数组,其中每个字符串都包含一些xml内容。我必须将每个字符串放入一个文件中,最后必须将所有xml作为zip文件下载

我们如何使用JSF实现它

示例代码:

String content="<?xml version="1.0" encoding="UTF-8"?>
<Head>
<Car>
    <model>i10</command>
    <price></target>

</car></Head>";
 HttpServletResponse response =
               (HttpServletResponse) FacesContext.getCurrentInstance()
                   .getExternalContext().getResponse();
       ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());
       ZipEntry ze= new ZipEntry("spy.log");
       zos.putNextEntry(ze);

       zos.write(content.getBytes());
       zos.closeEntry();


       response.setContentType("application/zip");

       response.setHeader("Content-Disposition", "attachment;filename=fyi.zip");
       response.setHeader("Content-Transfer-Encoding", "binary");
       response.getOutputStream().flush();
       response.getOutputStream().close();
       FacesContext.getCurrentInstance().responseComplete();
字符串内容=”
i10
";
HttpServletResponse=
(HttpServletResponse)FacesContext.getCurrentInstance()
.getExternalContext().getResponse();
ZipOutputStream zos=新的zipoutpstream(response.getOutputStream());
ZipEntry ze=新的ZipEntry(“spy.log”);
佐斯·普特内森特里(泽);
write(content.getBytes());
zos.closeEntry();
response.setContentType(“应用程序/zip”);
setHeader(“内容处置”、“附件;文件名=fyi.zip”);
setHeader(“内容传输编码”、“二进制”);
response.getOutputStream().flush();
response.getOutputStream().close();
FacesContext.getCurrentInstance().responseComplete();

但我无法将其作为附件下载。请指导我

必须先完成标题。(与HTTP一样,首先写入头行,然后写入内容。)

content.getBytes(“UTF-8”)

不要关闭响应输出流。在末尾调用
zos.finish()
(与
zos.close()
-必须调用两者中的一个来获得zip文件)。关闭响应输出流是容器的责任


(确保除了上面的代码外没有输出任何内容。)

您是否尝试使用response.addHeader而不是response.setHeader

response.addHeader("Content-Disposition", "attachment;filename=fyi.zip");
response.addHeader("Content-Transfer-Encoding", "binary");

请从开发者的角度而不是最终用户的角度详细说明“我不能”。对不起,这完全是胡说八道。在未来的回答中,你似乎是在黑暗中瞎开枪,至少要建设性地、理智地阐述为什么你认为这可能会解决问题。否则它看起来太像你不知道你在说什么。我已经将这个例子与一个工作代码进行了比较,并且在我的代码中使用了addHeader。如果我看到一个方法setHeader,我建议这个方法设置Header并可能删除旧值。方法名addHeader应添加附加信息。但我不知道在这种情况下是否如此。对不起,这是在黑暗中瞎拍的,但我只想帮忙:-)