Pourquoi prependId=“false” dans un formulaire jsf?
Je sais ce que prependId="false"
n'. Il a défini le drapeau alors que l'id de la forme n'est pas à mettre l'id de la forme de l'enfant, mais pourquoi? aucune raison particulière pour laquelle vous voulez ou ne voulez pas ajouter l'id?
- Connexes: stackoverflow.com/questions/7415230/... tl;dr: il suffit de ne pas l'utiliser, jamais.
Vous devez vous connecter pour publier un commentaire.
Dans mon expérience, je n'ai jamais utiliser cet attribut. Cependant, dans certains cas, il peut être utile.
Lorsque vous utilisez Facelets, vous pouvez créer des modèles ou inclure des pages à l'intérieur d'une autre page. Vous pouvez donc imaginer qu'une page peut être inclus dans plusieurs pages. Prenons l'exemple où le parent pages contiennent un
form
, avec différents id:Page 1:
Page 2:
Maintenant, dans le
my-page.xhtml
, vous avez un<h:inputText id="foo"/>
. Dans le premier cas, l'ID de l'entrée seraform1:foo
, tandis que dans le second cas, il seraform2:foo
. Cela pourrait créer des situations complexes, si vous avez besoin d'un accès direct à cette composante en Javascript ou en Java (à l'aide defindComponent("...")
méthode).Si vous utilisez
prependId="false"
(ou sur certains composantsforceId="true"
), le nom réel sera simplementfoo
, puis votre code sera plus simple car vous n'aurez pas de soins sur le conteneur du champ de saisie.Cependant, vous devrez utiliser cet attribut attentivement, vous pouvez obtenir un duplicata de l'ID d'erreur si vous utilisez cette
prepend
attribut trop souvent...Moderne jsf versions, il pourrait aussi briser ajax, voir UIForm avec prependId="false" pauses <f:ajax render>
this
mot clé de manière intelligente 🙂Une situation où prependId=false est utile dans le formulaire de connexion, si vous utilisez le Printemps de Sécurité, parce que l'id de la inputtexts doivent être exactement "j_username" et "j_password". Donc, vous ne devez pas mettre l'id du formulaire avant eux, et en utilisant prependId=false est un bon choix pour réaliser cela.
Je préfère ajouter prependId parfois l'occasion de faire des éléments de style par le biais de leurs classes d'identité plus facile. Par exemple, un formulaire:
Serait de vous donner un ID de
myform:mytext
. Comme le colon est réservée dans le CSS, vous avez pour échapper à la CSS à lire quelque chose comme#myform\:mytext { ... }
que je préfère ne pas le faire. AvecprependId="false"
- je obtenir de l'utiliser juste#mytext { ... }
qui est beaucoup plus simple & agréable à lire. Il joue aussi de la plus agréable avec les préprocesseurs CSS comme MOINS ou Sass.styleClass
pour attribuer des classes CSS pour les composants. JSF ne modifie jamais les noms de classe CSS, et comme un effet secondaire, vous obtenez le droit de la sémantique. Les classes CSS sont l'habitat naturel de règles CSS.Un scénario où nous avons à définir cet indicateur est dans le cas de la saisie semi-automatique de contrôle de primefaces bibliothèque.
J'ai dû mettre ce drapeau à false quand j'essayais de saisie semi-automatique de contrôle de primefaces de la bibliothèque. Je n'ai pas été en mesure d'obtenir la saisie semi-automatique de travail, mais après la définition de ce drapeau il a bien fonctionné. Vous pouvez voir ce lien à ma question au sujet de ce problème
WARN [Paramètres] Paramètres: Invalid morceau ignoré. avertissement à venir dans primefaces application
En plus à faire pour les sélecteurs CSS, plus facile, à l'aide de
prependId=false
facilite l'utilisation de JavaScript et de jQuery pour accéder à des éléments spécifiques.Autrement, sans l'aide de RichFaces, pour obtenir à un elmement par id à l'aide de jQuery, vous aurez à utiliser une vilaine séquence d'échappement comme:
$(.myClass)
.