Quelle est la différence entre ces approches?
Utilisation Facelet modèles (en <ui:include>
et/ou <ui:composition>
) si vous voulez diviser principal de mise en page de fragments en réutilisables, et les modèles. E. g. l'en-tête, menu, pied de page, etc. Un exemple peut être trouvé dans ma réponse à cette question: Comment faire pour inclure un autre format XHTML XHTML à l'aide de JSF 2.0 Facelets?
Utilisation Facelet tag des fichiers si vous voulez avoir un groupe de composants réutilisables, afin de prévenir/minimiser la duplication de code. E. g. un groupe de label+entrée+composants de message. La différence majeure avec des éléments composites, c'est que la sortie d'une Facelet fichier de balises ne représentent pas un seul UIComponent
et peut dans certains cas être la seule solution lorsqu'un composant composite ne suffit pas. Un exemple peut être trouvé dans ma réponse à ces questions: Comment faire une grille de JSF composite composant?, Comment créer un composant composite pour une datatable de la colonne? et Primefaces outputLabel composite composant.
L'utilisation de pièces en Composite si vous voulez créer une seule et réutilisables personnalisés UIComponent
avec un seul la responsabilité de l'aide pur XML. Un tel composant composite est généralement constitué d'un tas de composants existants et/ou HTML et obtenir physiquement rendu en tant que composant unique et est censé être lié à un seul haricot propriété. E. g. un composant qui montre une notation en étoiles basées sur un nombre entier donné de valeur, ou un composant qui représente une date unique de la propriété par 3 dépendante <h:selectOneMenu>
composants, ou une composante qui représente un moment unique propriété de 2 champs de saisie. Un exemple peut être trouvé dans notre Composite, Composante de la page wiki et le blog intitulé "Composite Composant avec plusieurs champs de saisie" et ma réponse à cette question: Split java.util.Date de plus de deux h:inputText champs représentant les heures et les minutes avec f:convertDateTime.
L'utilisation d'un Composant Personnalisé à chaque fois que la fonctionnalité ne peut pas être réalisé avec Facelet tag des fichiers ou des composants en matériaux composites, en raison de l'absence de soutien dans la norme/ensemble de composants. E. g. un <input type="file">
. Un exemple peut être trouvé dans ce blog: le Téléchargement de fichiers avec JSF 2.0 et Servlet 3.0. Ou, lorsque vous souhaitez contrôler la construction de la JSF composant de l'arbre au lieu de rendu de la sortie HTML, alors vous devriez envisager un Tag Handler. Un exemple peut être trouvé dans ma réponse à cette question: Personnalisé Facelet composant JSF.
Pourrait performances diffèrent-ils?
Le souci de performances est négligeable. Le choix doit être effectué sur la base de béton exigences fonctionnelles et le dernier degré de l'abstraction, la réutilisabilité et la maintenabilité de l'application. Chaque approche a ses propres et bien réglés par le but et les limites.
Composite composants n'ont cependant une surcharge importante lors de la construction/restauration de la vue. Ne pas en abuser si vous voulez utiliser uniquement les fonctionnalités de base qui est déjà possible avec un simple fichier include ou un fichier de balises. Ne pas utiliser la facilité de configuration (lire: non *.taglib.xml
le fichier nécessaire) comme une excuse pour préférer des composants composites sur les fichiers de balises. En outre, dans les anciennes versions de Mojarra, des composants composites avait des problèmes de performances avec l'attribution des valeurs par défaut, c'est déjà corrigé depuis 2.1.13.
Lors de l'utilisation de Mojarra, n'oubliez pas de désactiver la relativement courte Facelets la période de rafraîchissement pour le mode de production:
<context-param>
<param-name>javax.faces.FACELETS_REFRESH_PERIOD</param-name>
<param-value>-1</param-value>
</context-param>
(ne pas utiliser ce paramètre pour le développement, vous avez pour redémarrer le serveur tout entier à obtenir des changements dans les Facelets fichiers à être réfléchi)
MyFaces déjà par défaut est -1
lorsque javax.faces.PROJECT_STAGE
n'est pas défini à l' Development
.