216 votes

Comment inclure un autre XHTML dans XHTML en utilisant JSF 2.0 Facelets?

Quelle est la façon la plus correcte pour inclure une autre XHTML page dans une page XHTML ? J’ai essayé différentes façons, aucun d'entre eux travaillent.

418voto

BalusC Points 498232

Plus moyen de base est de <ui:include>. Le contenu doit être placé à l'intérieur d' <ui:composition>.

Le coup d'envoi de l'exemple de la page principale, /page.xhtml:

<!DOCTYPE html>
<html lang="en"
    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">
    <h:head>
        <title>Include demo</title>
    </h:head>
    <h:body>
        <h1>Master page</h1>
        <p>Master page blah blah lorem ipsum</p>
        <ui:include src="/WEB-INF/include.xhtml" />
    </h:body>
</html>

La page /WEB-INF/include.xhtml:

<ui:composition 
    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">
    <h2>Include page</h2>
    <p>Include page blah blah lorem ipsum</p>
</ui:composition>

Ce doit être ouvert par /page.xhtml.


Une méthode plus avancée de notamment est la création de modèles. Cela comprend essentiellement l'inverse. Le maître-modèle de la page doit utiliser <ui:insert> à déclarer endroits pour insérer défini un modèle de contenu. Le modèle de page de client qui utilise le modèle master page doit utiliser <ui:define> afin de définir le contenu d'un modèle qui doit être inséré.

Modèle Master page /WEB-INF/template.xhtml:

<!DOCTYPE html>
<html lang="en"
    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">
    <h:head>
        <title><ui:insert name="title">Default title</ui:insert></title>
    </h:head>
    <h:body>
        <div id="header">Header</div>
        <div id="menu">Menu</div>
        <div id="content"><ui:insert name="content">Default content</ui:insert></div>
        <div id="footer">Footer</div>
    </h:body>
</html>

(l'en-tête, le menu et le pied de page peut à son tour être même <ui:include> fichiers)

Modèle de page de client /page.xhtml (note de l' template d'attribut):

<ui:composition template="/WEB-INF/template.xhtml"
    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">

    <ui:define name="title">
        New page title here
    </ui:define>

    <ui:define name="content">
        <h1>New content here</h1>
        <p>Blah blah</p>
    </ui:define>
</ui:composition>

Ce doit être ouvert par /page.xhtml. Si il n'y a pas d' <ui:define>, alors la valeur par défaut du contenu à l'intérieur d' <ui:insert> sera affiché à la place, le cas échéant.

Notez que les fichiers qui ne sont pas censé être accessible au public juste en entrant/deviner son URL sont été placé en /WEB-INF le dossier, comme le sont fichier et le fichier de modèle. Voir aussi Qui fichiers XHTML dois-je mettre dans /WEB-INF et qui n'est pas?

Notez également qu'il n'y a pas de balisage extérieur <ui:composition> ni <ui:define>. Vous pouvez mettre n'importe quel, mais ils seront ignorés par Facelets. Mettre le balisage y est seulement utile pour les concepteurs de sites web. Voir aussi Est-il un moyen de lancer une page JSF sans la construction de l'ensemble du projet?

Pour un exemple vivant de l'avancé de la Facelets de gabarits, de vérifier le dossier WebContent de OmniFaces site vitrine code source.

23voto

Benchik Points 656

Page inclus :

Y compris la page :

  • Vous commencez votre fichier xhtml inclus avec `` comme indiqué ci-dessus.
  • Vous incluez ce fichier avec `` dans le fichier xhtml y compris, comme indiqué ci-dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X