2010-09-27 8 views
8

Je dois fortement remplacer JSF 2.0 En-tête de type de contenu. Par défaut, il estJSF, remplacer les en-têtes HTTP

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

Mais je dois

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

Merci.

Répondre

5

Que diriez-vous

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

Cette solution est nécessaire au travail avec des versions plus anciennes d'iPhone et d'iPad. Il semble que les navigateurs ultérieurs surdosent le Content-Type par défaut et font leur meilleure estimation. Mais les anciens navigateurs respectaient l'en-tête Content-Type et l'en-tête attendu. Grande solution qui était simple. – JeffJak

6

Utilisez le right doctype.

<!DOCTYPE html> 

Rien de plus. Ne mettez pas non plus la déclaration <?xml?> en haut. Voici un template minimum:

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

C'est le doctype HTML5. Il est entièrement compatible avec le balisage XHTML 1.x et ajoute plus d'avantages.

+0

supprimé ma réponse peu claire, et merci de l'effacer. –

3

L'approche suivante fonctionne dans tous les navigateurs:

Ecrire 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"); 

     } 
    } 

et l'enregistrer dans les faces-context.xml:

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

Le 'PhaseListener' n'est-il pas une" solution "trop ​​compliquée pour ce problème simple? Indépendamment de cela, pourquoi ne pas juste un 'Filter' puisque vous n'aurez aucun intérêt dans' FacesContext'? – BalusC

+0

1. il fonctionne dans tout le navigateur 2. Il peut en avoir besoin dans le futur – Dejell

+0

1. Je ne suis pas sûr de savoir comment faire le travail dans un 'PhaseListener' au lieu d'un' Filter' ou juste tout droit dans la vue a été détecté par le navigateur web. Peux-tu élaborer? 2. Peut-être. – BalusC