2010-09-27 1 views
8

Ho fortemente bisogno di ignorare JSF 2.0 intestazione Content-Type. Predefinito èJSF, sovrascrive le intestazioni HTTP

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

ma ho bisogno

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

Grazie.

risposta

5

Come su

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

Questa soluzione è necessaria per il lavoro con le versioni precedenti di iPhone e iPad. Sembra che i futuri brower stiano eliminando il Content-Type di default e facendo la loro ipotesi migliore. Ma i browser più vecchi rispettavano l'intestazione Content-Type e l'intestazione prevista. Ottima soluzione che era semplice. – JeffJak

6

Utilizzare il right doctype.

<!DOCTYPE html> 

Niente di più. Inoltre non mettere la dichiarazione <?xml?> in cima. Ecco un modello minimo:

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

È il doctype HTML5. È completamente compatibile con il markup XHTML 1.x e aggiunge ulteriori vantaggi.

+0

cancellata la mia risposta non chiara, e grazie per averlo chiarito. –

3

L'approccio seguito funziona in tutti i browser:

Scrivi una 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"); 

     } 
    } 

e registrarlo in faccia-context.xml:

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

Non è un "PhaseListener" una soluzione "troppo complicata" per questo semplice problema? A prescindere da questo, perché non solo un 'Filtro' dal momento che non avrai alcun interesse nel' FacesContext'? – BalusC

+0

1. funziona in tutto il browser 2. Potrebbe averne bisogno in futuro – Dejell

+0

1. Non sono sicuro di come sia stato rilevato il lavoro all'interno di un 'PhaseListener' invece di un' Filter' o semplicemente dritto nella vista il browser. Puoi elaborare? 2. Forse. – BalusC