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

Quelle est la manière la plus correcte d’inclure une autre page XHTML dans une page XHTML? J’ai essayé différentes manières, aucune ne fonctionne.

Le moyen le plus simple est . Le contenu inclus doit être placé dans .

Exemple de /page.xhtml page maître /page.xhtml :

    Include demo   

Master page

Master page blah blah lorem ipsum

La page d’ /WEB-INF/include.xhtml (oui, c’est le fichier dans son intégralité, les balises en dehors de sont inutiles car elles sont ignorées par Facelets de toute façon):

  

Include page

Include page blah blah lorem ipsum

Cela doit être ouvert par /page.xhtml . Notez que vous n’avez pas besoin de répéter , et dans le fichier include car cela entraînerait un code HTML non valide .

Vous pouvez utiliser une expression EL dynamic dans . Voir aussi Comment ajax-refresh dynamic inclut le contenu par menu de navigation? (SPA JSF) .


/

Une méthode plus avancée d’inclusion est la création de modèles . Cela inclut essentiellement le contraire. La page du modèle maître doit utiliser pour déclarer des lieux pour insérer du contenu de modèle défini. La page client du modèle qui utilise la page de modèle principale doit utiliser pour définir le contenu du modèle à insérer.

Page modèle maître /WEB-INF/template.xhtml (comme astuce de conception: l’en-tête, le menu et le pied de page peuvent à leur tour être même des fichiers ):

    <ui:insert name="title">Default title</ui:insert>     
Default content

Page client du modèle /page.xhtml (notez l’atsortingbut template ; ici aussi, c’est le fichier dans son intégralité):

   New page title here   

New content here

Blah blah

Cela doit être ouvert par /page.xhtml . S’il n’y a pas de , alors le contenu par défaut dans sera affiché à la place, le cas échéant.


Vous pouvez transmettre des parameters à ou par .

    
   ...  

Dans le fichier include / template, il sera disponible sous la forme #{foo} . Dans le cas où vous avez besoin de passer “plusieurs” parameters à , vous devriez envisager d’enregistrer le fichier include en tant que tagfile, afin de pouvoir l’utiliser comme . Voir aussi Quand utiliser , des fichiers de balises, des composants composites et / ou des composants personnalisés?

Vous pouvez même passer des beans entiers, des méthodes et des parameters via . Voir aussi JSF 2: comment passer une action incluant un argument à invoquer dans une sous-vue Facelets (en utilisant ui: include et ui: param)?


Conseils de conception

Les fichiers qui ne sont pas censés être accessibles au public en entrant / devinant simplement leur URL, doivent être placés dans le dossier /WEB-INF , comme le fichier include et le fichier de modèle dans l’exemple ci-dessus. Voir aussi Quels fichiers XHTML dois-je mettre dans / WEB-INF et lesquels ne le sont pas?

Il n’y a pas besoin de balisage (code HTML) en dehors de et . Vous pouvez en mettre, mais ils seront ignorés par Facelets. Mettre des balises là-bas est seulement utile pour les concepteurs Web. Voir aussi Existe-t-il un moyen d’exécuter une page JSF sans créer tout le projet?

Le doctype HTML5 est le doctype recommandé ces jours-ci, “malgré” que c’est un fichier XHTML. Vous devriez voir XHTML comme un langage vous permettant de produire une sortie HTML à l’aide d’un outil basé sur XML. Voir aussi Est-il possible d’utiliser JSF + Facelets avec HTML 4/5? et JavaServer Faces 2.2 et HTML5, pourquoi XHTML est-il toujours utilisé ?

Les fichiers CSS / JS / image peuvent être inclus en tant que ressources dynamicment relocalisables / localisées / versionnées. Voir aussi Comment référencer une ressource CSS / JS / image dans un modèle Facelets?

Vous pouvez placer les fichiers Facelets dans un fichier JAR réutilisable. Voir aussi Structure pour plusieurs projets JSF avec code partagé .

Pour obtenir des exemples concrets de modèles de Facelets avancés, consultez le dossier src/main/webapp du code source de l’application Java EE Kickoff et le code source du site de démonstration OmniFaces .

Page incluse:

    

Y compris la page:

   
  • Vous commencez votre fichier xhtml inclus avec ui:composition comme indiqué ci-dessus.
  • Vous incluez ce fichier avec l’ ui:include dans le fichier xhtml, comme indiqué ci-dessus.