对我来说,问题很简单。Onclick 锚标记,我使用执行 javascripta4j:jsFunction
并且此函数的操作应该从服务器流式传输 XML 文件。问题是,在richfaces 响应上发送的流没有给出saveAs 对话框,而是在浏览器上呈现xml。在阅读了许多文章后,我了解到 Ajax 响应无法提供 saveAs 对话框。
xhtml 片段:
<h:form>
<a4j:jsFunction name="updateCart" reRender="idFavouritePanel">
<a4j:actionparam name="jsonObject" assignTo="#{archiveOrderBean.jsonObject}"/>
</a4j:jsFunction>
<a4j:jsFunction name="download" reRender="partTableId" action="#{archiveOrderBean.loadSelectedOrder}">
<a4j:actionparam name="strId" assignTo="#{archiveOrderBean.strId}" />
</a4j:jsFunction>
</h:form>
以及来自 bean 的响应集。
response.setContentType("application/xml");
response.setContentLength(byteArr.length);
response.addHeader("Content-Disposition", "attachment; filename=" + attr.getUrl());
// writer.write(byteArr.toString());
// writer.flush();
response.getOutputStream().write(byteArr);
response.getOutputStream().flush();
// post(trueStr,encPath,encUrl,trueStr,response);
FacesContext.getCurrentInstance().responseComplete();
在这方面的任何帮助都会非常有帮助。