Je ne sais pas quels sont les avantages de l'utilisation de <f:view>
et <f:subview>
. J'ai remarqué que l'on pouvait écrire des pages JSF sans les utiliser.
Quels sont les avantages d'utiliser ces balises?
<f:view>
n'est utile que si vous souhaitez spécifier/remplacer explicitement l'un des attributs disponibles tels que locale
, encoding
, contentType
, etc. ou souhaitez attacher des écouteurs de phase. Par exemple.
<f:view locale="#{user.locale}" encoding="UTF-8" contentType="text/html">
Si vous ne le spécifiez pas, les valeurs par défaut JSF saines seront simplement utilisées à la place, qui sont respectivement UIViewRoot#getLocale()
, UTF-8
Et la correspondance la plus proche de l'en-tête de demande Accept
. Il convient de noter que la correspondance la plus proche de l'en-tête de demande Accept
n'est pas toujours tout à fait correcte. Parfois, il en résulte application/xhtml+xml
En raison de la présence de l'extension .xhtml
Dans l'URL dans le cas où Facelets et le navigateur Web ne sont pas configurés pour l'interpréter comme text/html
Par défaut (comme MSIE ). Vous souhaitez vraiment éviter ce mauvais type de contenu en le définissant explicitement sur text/html
.
Notez que peu importe où vous le placez dans le modèle. Vous pouvez même le mettre dans le client de modèle en tant qu'enfant immédiat de <ui:define>
. Cependant, le lieu canonique est le fils immédiat de <html>
Et enveloppe ainsi à la fois <h:head>
Et <h:body>
. C'est également la façon dont cela se fait dans JSP hérité où c'est réellement requis . Dans Facelets, il est facultatif et comptabilisé en tant que métadonnées.
<f:subview>
créera un autre contexte de conteneur de nommage. Cela est particulièrement utile lorsque vous souhaitez réutiliser un fichier include qui à son tour contient plusieurs ID de composant fixes dans la même racine de vue, sinon vous obtiendrez des erreurs d'ID de composant en double. Cependant, depuis JSF 2.0, un tel fichier d'inclusion peut mieux être un composant composite qui est déjà en soi un conteneur de dénomination.
Si vous ne le spécifiez pas, cela ne nuira pas si vous ne réutilisez pas physiquement un composant avec le même ID plusieurs fois dans la vue.