2010-09-27 23 views
8

Necesito sobrescribir JSF 2.0 Content-Type encabezado. Por defecto esJSF, sobrescribir encabezados HTTP

Content-Type:application/xhtml+xml; charset=UTF-8 

pero necesito

Content-Type:text/html; charset=UTF-8 

Gracias.

Respuesta

5

¿Qué tal

<f:view contentType="text/html" /> 
+0

Esta solución es necesaria para el trabajo con versiones anteriores de iPhone y iPad. Parece que los navegadores posteriores están deshaciéndose del tipo de contenido predeterminado y haciendo su mejor suposición. Pero el navegador anterior respetaba el encabezado Content-Type y el encabezado de espera. Gran solución que fue simple. – JeffJak

6

Utilice el right doctype.

<!DOCTYPE html> 

Nada más. Además, no coloque la declaración <?xml?> en la parte superior. Aquí hay una plantilla mínima:

<!DOCTYPE html> 
<html 
    xmlns:f="http://java.sun.com/jsf/core" 
    xmlns:h="http://java.sun.com/jsf/html" 
    xmlns:ui="http://java.sun.com/jsf/facelets"> 
    <h:head> 
     <title>Insert your title</title> 
    </h:head> 
    <h:body> 
     <h1>Hello World</h1> 
    </h:body> 
</html> 

Es el doctype HTML5. Es totalmente compatible con el marcado XHTML 1.x y agrega más ventajas.

+0

eliminé mi respuesta poco clara, y gracias por despejarla. –

3

El siguiente enfoque funciona en todos los navegadores:

Escribe un PhaseListener:

public class ContentTypePhaseListener implements PhaseListener { 


     public PhaseId getPhaseId() 
     { 
      return PhaseId.RENDER_RESPONSE; 
     } 

     public void afterPhase(PhaseEvent event) 
     { 
     } 

     public void beforePhase(PhaseEvent event) 
     { 
      FacesContext facesContext = event.getFacesContext(); 
      HttpServletResponse response = (HttpServletResponse) facesContext 
        .getExternalContext().getResponse(); 
      response.addHeader("Content-Type", "text/html; charset=UTF-8"); 

     } 
    } 

y registrarlo en caras-context.xml:

<lifecycle> 
     <phase-listener>com.mycompnay.listener.ContentTypePhaseListener </phase-listener> 
    </lifecycle> 
+0

¿No es un 'PhaseListener' una" solución "demasiado complicada para este simple problema? Independientemente de esto, ¿por qué no solo un 'Filtro' ya que no tendrá ningún interés en' FacesContext'? – BalusC

+0

1. funciona en todos los navegadores 2. Lo puede necesitar en el futuro – Dejell

+0

1. No estoy seguro de cómo hacer el trabajo dentro de un 'PhaseListener' en lugar de un' Filter' o solo directamente en la vista es detectado por el navegador web. ¿Puedes elaborar? 2. Tal vez. – BalusC

Cuestiones relacionadas