J'ai lu des informations sur la liaison de composants avec l'attribut binding
dans les questions suivantes:
Je comprends qu'il lie le composant d'interface utilisateur derrière la balise JSF dans la vue à une propriété UIComponent
dans le bean de sauvegarde. Cependant, je suis confus quant à l'utilisation de la liaison de composants et quand nous devrions l'utiliser. Quelqu'un peut-il l'expliquer de manière plus simple et donner des exemples pratiques?
Vous devez l'utiliser si vous souhaitez avoir accès à l'ensemble UIComponent
au lieu de seulement sa valeur. Par exemple, pour accéder à certaines méthodes qui ne peuvent pas être invoquées/liées dans la vue. Ceci est répondu dans la 1ère question que vous avez trouvée: liaison de composant JSF - une certaine confusion
La 2ème question que vous avez trouvée, liaison de composant vs findComponent () - quand utiliser laquelle? , répond simplement "binding
versus findComponent()
", il ne répond pas " binding
contre value
" du tout comme vous semblez le penser. S'il vous plaît, ne vous embrouillez pas. value
gagnerait évidemment (binding
.
Dans le code du monde réel, la liaison des composants au bean de sauvegarde n'est souvent utilisée que lorsque le développeur a besoin de manipuler ses enfants par programmation, par exemple component.getChildren().add(...)
. Le bean doit cependant être défini dans le champ d'application. Une portée plus large peut entraîner des incohérences, car les instances de composants sont essentiellement créées sur demande et ne doivent pas être partagées entre plusieurs demandes. La portée de la vue peut également, mais cela est très inefficace en mémoire, et sur les versions de Mojarra antérieures à 2.1.18, l'enregistrement partiel de l'état doit également être désactivé, sinon l'instance de bean de portée vue référencée par binding
sera implicitement recréée à chaque demande. Voir aussi JSTL dans JSF2 Facelets ... est logique? pour une réponse connexe.
Il est également possible de lier le composant à "la vue". Par exemple.
<h:someComponent binding="#{some}">
Cela fait référence à une instance de UIComponent
dans la portée Facelet ("portée de page"). Cela vous permet d'utiliser par exemple #{some.clientId}
, #{some.value}
ailleurs dans la même page. Notez qu'aucun bean de sauvegarde n'est impliqué ici. Voir aussi liaison de composant JSF sans propriété de bean .
Voici quelques applications réelles de l'attribut binding
:
lire cette réponse:
Quels sont les avantages de l'utilisation d'un attribut de liaison dans JSF?
Cependant, beaucoup de gens dans la communauté ne recommandent pas la reliure. Voir cet article par exemple:
http://drewdev.blogspot.com/2009/01/jsf-component-binding-stinks.html