将XML文档写入浏览器的响应流,并使浏览器显示“另存为”对话框。
请考虑以下download()
方法:
HttpServletResponse response = getResponse();
BufferedWriter bw = new BufferedWriter( new OutputStreamWriter(
response.getOutputStream() ) );
String filename = "domain.xml";
String mimeType = new MimetypesFileTypeMap().getContentType( filename );
// Prints "application/octet-stream"
System.out.println( "mimeType: " + mimeType );
// response.setContentType( "text/xml;charset=UTF-8" );
response.setContentType( mimeType );
response.setHeader( "Content-Disposition", "attachment;filename="
+ filename );
bw.write( getDomainDocument() );
bw.flush();
bw.close();
在Firefox中,XML内容显示在浏览器窗口中。在IE 7中,不会显示XML内容-您必须查看文档源。两种情况都不是理想的结果。
该网页对该按钮使用以下代码:
<a4j:commandButton action="#{domainContent.download}" value="Create Domain" reRender="error" />
生成的XML 并非以 开头<?xml version="1.0"?>
,而是XML内容类似于:
<schema xmlns="http://www.jaspersoft.com/2007/SL/XMLSchema" version="1.0">
<items>
<item description="EDT Class Code" descriptionId="" label="EDT Class Code" labelId="" resourceId="as_pay_payrolldeduction.edtclass"/>
</items>
<resources>
<jdbcTable datasourceId="JNDI" id="as_pay_payrolldeduction" tableName="as_pay.payrolldeduction">
<fieldList>
<field id="payamount" type="java.math.BigDecimal"/>
</fieldList>
</jdbcTable>
</resources>
</schema>
请注意以下代码行:
response.setHeader( "Content-Disposition", "attachment;filename=" + filename );
使用<a4j:commandButton ... />
是问题。一个正常的<h:commandButton .../>
表现如预期。使用<h:commandBUtton .../>
可以防止<a4j:outputPanel .../>
刷新任何错误消息。
相关的接缝消息。
以下MIME类型不会触发“另存为”对话框:
"application/octet-stream"
"text/xml"
"text/plain"
哪些更改将导致a4j:commandButton
触发“另存为”对话框,以便提示用户保存XML文件(如domain.xml
)?
谢谢。
该代码存在以下问题:
<a4j:commandButton .../>
)不适用于附件。a4j
标签。<a4j:commandButton .../>
为<h:commandButton .../>
。bw.write( getDomainDocument() );
为bw.write( document );
。String document = getDomainDocument();
到的第一行try/catch
。<a4j:outputPanel.../>
(未显示)更改为<h:messages showDetail="false"/>
。本质上,删除与相关的所有Ajax工具commandButton
。仍然可以显示错误消息并利用RichFaces UI样式。
我正在使用Fiddler监视对ServiceStack API的调用,并且在内容长度字段中看到一个逗号。我只有在部署到特定的Windows服务器时才会看到这一点。这是什么意思? 整个回应: 我认为内容长度字段中不允许使用逗号。
问题内容: 为了避免未知,我一直试图避免使用大多数HTTP协议的属性。 但是,我对自己说,今天我将面对恐惧,开始有目的地使用标题。我一直在尝试将数据发送到浏览器并立即使用。例如,如果我有一个处于就绪状态4的Ajax处理程序函数,如下所示: 并且我在PHP代码中设置了content-type标头: 当清楚地告诉浏览器传入数据为时,为什么不能直接从处理程序函数访问该属性? 问题答案: 该头只是作为您的
我希望在客户端下载文件时向他们显示文件的大小。< br >但是HTTP头内容长度不起作用。< br >我环境如下。 阿帕奇 2.2 mod_deflate 轨道3.2 下载文件位于rails项目公用文件夹中。 当我下载它时,响应标头是这个。 接受范围字节 访问控制允许头...源,x 请求,内容类型 访问控制允许甲基...放置、获取、发布、删除、选项 访问控制-允许-原始...http://*.co
问题内容: 有什么方法可以获取原始响应的HTTP标头? 该方法对我不起作用,因为服务器吐出了多个“ Set-Cookie”,其中一些丢失了。 问题答案: 该方法对我不起作用 您是在的情况下问这个的吗?不可以,无法使用原始HTTP响应标头。您需要退回到低级的Socket编程。这是一个SSCCE,只需复制“ 粘贴 ”即可运行它。 为了避免每个尝试此代码片段的人都使SO过载,输出如下所示: 要了解有关以
我试图向一个我无法控制的服务器发出GET请求,该服务器在头中返回一个无效值:“application/json;charset=”。 当我尝试执行GET调用时,Spring在尝试解析该值时抛出一个InvalidMimeTypeException,因为它正确地期望在that=符号后面应该有一个实际的字符集。
问题内容: 如何从WebView获得HTTP标头响应?我找到了半解决方案,但是它是用Objective- C编写的,不能将其转换为Swift(我已经尝试过使用较差的Obj-C知识了)。 Objective-C代码: 该代码将如何看待Swift? 也许现在我们有更好的方法呢?并不总是启用缓存。 问题答案: 迅速 斯威夫特更严格; 您想保护自己免受指针和: 检查实际是否有 检查实际是否有 对响应进行类