type que español content charset java ajax jboss richfaces attachment

java - que - Disposición de contenido de encabezado de respuesta HTTP para archivos adjuntos



header(''content-type: text/html; charset=utf-8''); (5)

Problemas

El código tiene los siguientes problemas:

  • Una llamada Ajax ( <a4j:commandButton .../> ) no funciona con archivos adjuntos.
  • La creación del contenido de salida debe suceder primero.
  • La visualización de los mensajes de error tampoco puede utilizar etiquetas a4j basadas en a4j .

Solución

  1. Cambie <a4j:commandButton .../> por <h:commandButton .../> .
  2. Actualizar el código fuente:
    1. Cambie bw.write( getDomainDocument() ); bw.write( document ); .
    2. Agregar String document = getDomainDocument(); a la primera línea del try/catch .
  3. Cambie <a4j:outputPanel.../> (no se muestra) a <h:messages showDetail="false"/> .

Esencialmente, elimine todas las facilidades de Ajax relacionadas con el commandButton . Todavía es posible mostrar mensajes de error y aprovechar el estilo de la interfaz de usuario de RichFaces.

Referencias

Fondo

Escriba un documento XML en el flujo de respuesta de un navegador y haga que el navegador muestre el cuadro de diálogo "Guardar como".

Problema

Considere el siguiente método de 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();

En Firefox, el contenido XML se muestra en la ventana del navegador. En IE 7, el contenido XML no se muestra, debe ver el origen del documento. Ninguna de las dos situaciones es el resultado deseado.

La página web utiliza el siguiente código para el botón:

<a4j:commandButton action="#{domainContent.download}" value="Create Domain" reRender="error" />

El XML que se genera no comienza con <?xml version="1.0"?> , Más bien el contenido XML se asemeja a:

<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>

Actualización # 1

Tenga en cuenta la siguiente línea de código:

response.setHeader( "Content-Disposition", "attachment;filename=" + filename );

Actualización # 2

Usando <a4j:commandButton ... /> es el problema; un <h:commandButton .../> funciona como se espera. El uso de <h:commandBUtton .../> evita que <a4j:outputPanel .../> los mensajes de error.

Mensaje de costura relacionado.

Tipo MIME

Los siguientes tipos de mime no activan el cuadro de diálogo "Guardar como":

  • "application/octet-stream"
  • "text/xml"
  • "text/plain"

Pregunta

¿Qué cambios harán que a4j:commandButton active el cuadro de diálogo "Guardar como" para que se le solicite al usuario que guarde el archivo XML (como domain.xml )?

Gracias.


Esto no tiene nada que ver con el tipo MIME, sino con el encabezado Content-Disposition, que debería ser algo como:

Content-Disposition: attachment; filename=genome.jpeg;

Asegúrese de que en realidad se haya pasado correctamente al cliente (no filtrado por el servidor, el proxy o algo así). También puede intentar cambiar el orden de escritura de los encabezados y establecerlos antes de obtener el flujo de salida.


Intente cambiar su Tipo de contenido (tipo de medio) a application/x-download y su Disposición de contenido a: attachment;filename=" + fileName;

response.setContentType("application/x-download"); response.setHeader("Content-disposition", "attachment; filename=" + fileName);


Prueba el encabezado Content-Disposition

Content-Disposition: attachment; filename=<file name.ext>


ni uso en línea; ni apego; Solo usa

response.setContentType("text/xml"); response.setHeader( "Content-Disposition", "filename=" + filename );

o

response.setHeader( "Content-Disposition", "filename=/"" + filename + "/"" );

o

response.setHeader( "Content-Disposition", "filename=/"" + filename.substring(0, filename.lastIndexOf(''.'')) + "/"");