2 votes

portée de la demande et portée de la vue

Duplicata possible :
Comment choisir la bonne lunette de visée ?

Je suis novice en matière de programmation JSF, et j'ai besoin d'une clarification sur les scopes des beans. J'ai déjà lu toutes les questions sur cet argument, mais ce n'est pas si clair. Je ne comprends pas bien la portée de la requête. Je comprends que : "C'est la portée par défaut et fondamentalement le bean est vivant tout au long d'une seule requête HTTP".

Ainsi, par exemple, supposons que nous demandions au navigateur d'ouvrir une page web contenant un formulaire. Lorsque nous faisons la demande, un bean scope est créé, le cycle de vie commence et après la phase de rendu de la réponse, le bean Java est détruit. Ensuite, nous remplissons le formulaire et nous appuyons sur un bouton. Cela va lancer une autre requête HTTP, n'est-ce pas ?

Dans le même contexte, si on a un view scope bean au lieu d'un request scope bean, quelle est la différence ? Combien d'instances de bean sont créées ? Pourquoi est-il préférable de l'utiliser avec un datatable ?

2voto

dexter meyers Points 2223

La portée de la demande, comme le disent toutes vos sources, y compris le post lié par BalusC, commence à vivre peu de temps après que votre demande ait atteint le serveur, et est détruite peu de temps après que la dernière partie de la réponse ait été renvoyée.

En effet, si vous postbackez un formulaire, une nouvelle requête commence et donc une nouvelle portée de requête. Cela signifie que tout ce qui est request scoped sera créé à nouveau. Ainsi, pour un formulaire qui est d'abord rendu, puis renvoyé une fois, 2 beans à portée de requête seront créés.

La portée de la vue est conservée tant que vous effectuez des retours sur la même vue (page). Cela fonctionne au moyen du paramètre de formulaire caché appelé javax.faces.ViewState . La valeur de cet élément est une entrée dans une sorte de carte logique si vous utilisez la sauvegarde d'état sur le serveur. La manière dont l'implémentation de JSF résout ce problème n'est pas très importante ici (mais oui, il s'agit principalement d'une Map).

Après le postback, JSF est capable de récupérer exactement les mêmes beans scopés de vue à l'aide de ce paramètre. Ainsi, pour un formulaire qui est d'abord rendu, puis renvoyé une fois, 1 view scoped beans sera créé.

Pour une table de données, vous voudrez presque toujours utiliser la portée de la vue. La raison en est que vous voulez que les données soient les mêmes avant et après un postback. Si vos données sont 100% statiques et/ou si vous n'avez pas de postbacks (votre table n'est pas dans un formulaire), vous pouvez utiliser la portée de la requête à la place.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X