45 votes

Distinctions entre les différents types de Managed-Beans JSF

J'ai récemment lu cet article de Neil Griffin. Distinctions entre les différents types de Managed-Beans JSF et cela m'a fait réfléchir à la distinction entre les différents beans dans ma propre application. Pour résumer rapidement l'essentiel :

  • Modèle Managed-Bean : Ce type de Managed-Bean participe à la co-création de "Modèle" du modèle de conception MVC. Quand vous voyez le mot "modèle", pensez à DATA. Un JSF model-bean doit être un POJO qui suit le modèle de conception JavaBean avec des getters/setters. le modèle JavaBean avec des getters/setters encapsulant les propriétés. les propriétés.

  • Backing Managed-Bean : Ce type de managed-bean participe à la préoccupation "Vue" du modèle de conception MVC. L'objectif d'un backing-bean est de prendre en charge la logique de l'interface utilisateur, et il a une relation 1::1 avec une vue JSF, ou un formulaire JSF dans une composition Facelet. Bien qu'il typiquement des propriétés de style JavaBean avec des associés, il s'agit de propriétés de la vue et non du modèle de données modèle de données de l'application sous-jacente. Les backing-beans JSF peuvent aussi avoir des propriétés JSF actionListener et valueChangeListener.

  • Contrôleur Managed-Bean : Ce type de managed-bean participe à la préoccupation "contrôleur" du modèle de conception MVC. L'objectif d'un contrôleur est d'exécuter un certain type de logique métier et de renvoyer un code de résultat de navigation au gestionnaire de navigation JSF. Les beans contrôleurs JSF ont généralement des méthodes d'action JSF (et non des méthodes actionListener).

  • Support Managed-Bean : Ce type de bean "supporte" une ou plusieurs vues dans la préoccupation "Vue" du modèle de conception MVC. Le cas d'utilisation typique est de fournir une ArrayList aux listes déroulantes JSF h:selectOneMenu. qui apparaissent dans plus d'une vue JSF. Si les données contenues dans les listes déroulantes sont particulières à l'utilisateur, alors le bean doit être gardé dans la portée de la session.

  • Utilitaire Managed-Bean : Ce type de bean fournit un certain type de fonction "utilitaire" à une ou plusieurs vues JSF. Un bon exemple de ceci d'un bean FileUpload qui peut être réutilisé dans plusieurs applications applications web.

Cela m'a semblé logique et, au cours des dernières heures, j'ai remanié mon code et j'ai trouvé ce qui suit en ce qui concerne la connexion de l'utilisateur :

El AuthenticationController est un exemple de Managed-Bean de contrôleur. Il s'agit d'une requête et il comporte deux getters et setters pour définir un nom d'utilisateur et un mot de passe, ainsi que deux méthodes de navigation, authenticate y logout qui permet à l'utilisateur d'accéder à sa zone privée lorsqu'il a réussi à se connecter, ou de revenir à la page principale lorsqu'il se déconnecte.

El UserBean est un exemple de Managed-Bean de soutien. Il est adapté à la session et comporte une instance de User (qui serait nulle si vous n'êtes pas authentifié) avec un getter et un setter, rien de plus.

El AuthenticationController a cet utilisateur comme propriété gérée ( @ManagedProperty(value = "#{userController.user} private User user; ). Une fois l'authentification réussie, le AuthenticationController définirait la propriété gérée sur l'instance réelle de l'utilisateur avec le nom d'utilisateur correspondant qui a été utilisé pour la connexion.

Tout nouveau haricot pourra également saisir l'utilisateur en tant que propriété gérée et extraire les données dont il a besoin, comme l'appartenance à un groupe par exemple, si la propriété de l'utilisateur est gérée. User La classe présenterait une liste avec les noms des groupes.

Serait-ce la bonne façon de procéder en ce qui concerne la séparation des préoccupations ?

89voto

BalusC Points 498232

Il s'agit d'une question très subjective. Personnellement, je ne suis pas d'accord avec cet article et je trouve qu'il donne de très mauvais conseils aux débutants.


Modèle Managed-Bean : Ce type de Managed-Bean participe à la préoccupation " Modèle " du modèle de conception MVC. Lorsque vous voyez le mot "modèle", pensez à DATA. Un beignet de modèle JSF doit être un POJO qui suit le modèle de conception JavaBean avec des getters/setters encapsulant les propriétés.

Je n'en ferais absolument pas un haricot géré. Il suffit d'en faire une propriété d'un @ManagedBean . Par exemple, un DTO ou un JPA @Entity .


Backing Managed-Bean : Ce type de Managed-Bean participe à la préoccupation "Vue" du modèle de conception MVC. L'objectif d'un backing-bean est de prendre en charge la logique de l'interface utilisateur, et il a une relation 1::1 avec une vue JSF ou un formulaire JSF dans une composition Facelet. Bien qu'il possède généralement des propriétés de type JavaBean avec des getters/setters associés, il s'agit de propriétés de la vue et non du modèle de données de l'application sous-jacente. Les backing-beans JSF peuvent aussi avoir des méthodes JSF actionListener et valueChangeListener.

De cette façon, vous continuez à dupliquer et à mapper les propriétés de l'entité dans le managed bean. Cela n'a aucun sens pour moi. Comme indiqué, il suffit de faire de l'entité une propriété du bean géré et de laisser les champs d'entrée s'y référer directement comme suit #{authenticator.user.name} au lieu de #{authenticator.username} .


Contrôleur Managed-Bean : Ce type de bean géré participe à la préoccupation " contrôleur " du modèle de conception MVC. L'objectif d'un bean contrôleur est d'exécuter un certain type de logique métier et de renvoyer un résultat de navigation au gestionnaire de navigation JSF. Les controller-beans JSF ont généralement des méthodes d'action JSF (et non des méthodes d'actionListener).

Ceci décrit le @RequestScoped / @ViewScoped @ManagedBean la classe à peu près. Le fait que les méthodes d'écoute d'événements soient autorisées ou non dépend du fait qu'elles soient spécifiques à la vue qui est liée au bean et/ou qu'elles dépendent de l'état du bean pour leur travail. Si c'est le cas, alors elles appartiennent au bean. Si ce n'est pas le cas, alors elles doivent être une implémentation autonome de n'importe quelle méthode d'écoute d'événement. FacesListener interface mais certainement pas un haricot géré.


Support Managed-Bean : Ce type de bean "supporte" une ou plusieurs vues dans la préoccupation "View" du modèle de conception MVC. Le cas d'utilisation typique est la fourniture d'une ArrayList aux listes déroulantes JSF h:selectOneMenu qui apparaissent dans plus d'une vue JSF. Si les données des listes déroulantes sont propres à l'utilisateur, le bean sera conservé dans la portée de la session.

Bien. Pour les données concernant l'ensemble de l'application, comme les listes déroulantes, il suffit d'utiliser un fichier de type @ApplicationScoped et pour les données relatives à la session, comme l'utilisateur connecté et ses préférences, il suffit d'utiliser un fichier @SessionScoped un.


Utilitaire Managed-Bean : Ce type de bean fournit un certain type de fonction "utilitaire" à une ou plusieurs vues JSF. Un bon exemple serait un bean FileUpload qui peut être réutilisé dans plusieurs applications Web.

Cela n'a pas vraiment de sens pour moi. Les backing beans sont généralement liés à des vues uniques. Cela ressemble trop à un ActionListener qui doit être utilisée par <f:actionListener> dans les composants de commande à votre choix. Certainement pas un haricot géré.

Pour des exemples de démarrage de la bonne approche, voir aussi :

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