IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JSF Java Discussion :

Header HTTP et interprétation du navigateur


Sujet :

JSF Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Par défaut Header HTTP et interprétation du navigateur
    Bonsoir,

    Je construis une petite application avec JSF et les Facelets, et j'ai un petit souci.
    Dans mon web.xml j'ai défini une page d'accueil par défaut et dans cette page j'ai un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <jsp:forward page="/faces/web/pages/login/login.xhtml"/>
    Ce forward m'affiche bien la page demandée avec le rendu que j'attends.

    Ensuite, si j'appelle la page en question directement (localhost:8080/moncontext/faces/web/pages/login/login.xhtml) la page affichée est la bonne mais le style n'est pas le même. Le plus gros symptôme c'est que l'image que j'ai mise en background sur la balise body ne s'affiche pas. Du moins c'est ce que je croyais, mais en fait le navigateur la télécharge bien (merci firebug) et si je fais "afficher l'image de fond" j'ai bien l'image qui apparait.
    Le code source généré est exactement le même dans les deux cas. Le fond ne s'affichait pas parce que mes éléments dans la page étaient tous positionnés en absolute. Si je mets du texte en vrac comme ça, cette fois le fond s'affiche bien, mais uniquement derrière le texte. (Dans le premier cas, avec le forward, le fond s'affiche sur la page entière).
    J'ai fouillé un peu, et la seule différence que je trouve c'est dans les headers de la réponse, le header Content-type.
    Dans le cas du forward, la valeur est "text/html;charset=UTF-8" et dans le deuxième cas, si je mets l'url complète le valeur est "application/xhtml+xml;charset=UTF-8".

    Est-ce que quelqu'un sait pourquoi le rendu est différent ?

  2. #2
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Bonjour,
    essaies de refaire le test mais en utilisant un url pattern post fixé (genre *.faces ou *.jsf) pour ta faces servlet ...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Par défaut
    J'ai essayé en utilisant un pattern post-fixé, mais c'est exactement la même chose. J'ai toujours ce Content-Type à "application/xhtml+xml;charset=UTF-8".

    Est-ce que l'un de vous utilisant les facelets et la JSF RI 1.2, pourrait me dire si le header de la réponse du serveur a aussi cette valeur ?

    Sinon voici ma page
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml"
    	xmlns:f="http://java.sun.com/jsf/core"
    	xmlns:h="http://java.sun.com/jsf/html"
    	xmlns:ui="http://java.sun.com/jsf/facelets">
    <f:view>
    	<head>
    	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
     
    	<title><h:outputText value="titre" /></title>
     
    	<link id="style" rel="stylesheet" type="text/css"
    		href="${facesContext.externalContext.requestContextPath}/web/style/css/main_style.css" />
     
    	</head>
     
    	<body>
    	<h:messages></h:messages>
    	<ui:debug />
    	<h:graphicImage value="/web/images/fleche1.png" alt="fleche"></h:graphicImage>
    	</body>
    </f:view>
    </html>
    Avant-hier quand j'ai posté le premier message, la balise meta
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    n'était pas présente dans la page. Je pensais l'avoir ajouté et que ça avait résolu mon problème mais visiblement j'ai du rêver.

    Si vous voulez des infos en plus, dites-le.

    EDIT :

    en ajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <f:view contentType="text/html">
    au lieu de <f:view> le header est bien text/html. Mais cet attribut n'est pas dans la tld.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    le forward est interne, le navigateur n'en a pas connaissance.

    Ainsi, tes urls relatives ne sont pas la même. Si une image a en url "images/background.gif" et que ton navigateur pointe sur "/mawebapp/", le navigateur tentera d'ouvrir "/mawebapp/images/background.gif", alors que si la navigateur pointe sur "/mawebapp/faces/machin/index.xhml", le navigateur tentera d'ouvrir "/mawebapp/faces/machin/images/background.gif", c'est là que se situe ta différence.

    Soit tu met tes urls pointant vers les styles et images en absolu (chiant à faire), soit tu utilise un redirect plutot qu'on forward (pour le redirect, le navigateur sera au courant de la nouvelle url, contrairement au forward)

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    325
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 325
    Par défaut
    En fait, les images sont bien trouvées (et affichées). Mais pas de la même façon.
    Comme je l'avais dit dans le premier message, le serveur ne met pas la même valeur dans le header "Content-Type" selon que j'appelle l'url localhost:8080/context/ ou bien localhost:8080/context/mapage.xhtml.

    Le problème se situe à ce niveau là.

    EDIT : A priori, ça a l'air normal d'avoir un header Content-Type : application/xhtml+xml;charset=UTF-8

    Dans les exemples livrés avec les facelets, ça se passe comme. La seule différence c'est que dans leur feuille de style, il y a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    body, html { background-color : #123465;}
    et pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    body { background-color : #123456;}
    Ça résout provisoirement mon problème. Mais si vous avez des commentaires, ils sont les bienvenus.

  6. #6
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    probablement parce que le jsp a déjà défini le content-type. Faut pas oublier que le borwser se comporte différent suivant l'entête, à savoir, suivant qu'il doive traiter le fichier fome du html 4.x ou comme du xhtml...

Discussions similaires

  1. [Axis] Headers HTTP
    Par getupa dans le forum Services Web
    Réponses: 4
    Dernier message: 28/06/2010, 14h41
  2. Collecttion nommée pour headers HTTP
    Par smartdev dans le forum C++
    Réponses: 1
    Dernier message: 25/09/2007, 18h11
  3. Header Http ob_start()
    Par Heaven dans le forum Langage
    Réponses: 1
    Dernier message: 19/06/2007, 17h33
  4. Comment passer des headers http ?
    Par Loko dans le forum Oracle
    Réponses: 5
    Dernier message: 15/11/2006, 09h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo