将XML文档写入浏览器的响应流,并使浏览器显示“另存为”对话框。
请考虑以下download()方法:
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内容类似于:
<?xml version="1.0"?>
<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 .../>刷新任何错误消息。
<a4j:commandButton ... />
<h:commandButton .../>
<h:commandBUtton .../>
<a4j:outputPanel .../>
相关的接缝消息。
以下MIME类型不会触发“另存为”对话框:
"application/octet-stream"
"text/xml"
"text/plain"
哪些更改将导致a4j:commandButton触发“另存为”对话框,以便提示用户保存XML文件(如domain.xml)?
a4j:commandButton
domain.xml
谢谢。
该代码存在以下问题:
<a4j:commandButton .../>
a4j
bw.write( getDomainDocument() );
bw.write( document );
String document = getDomainDocument();
try/catch
<a4j:outputPanel.../>
<h:messages showDetail="false"/>
本质上,删除与相关的所有Ajax工具commandButton。仍然可以显示错误消息并利用RichFaces UI样式。
commandButton