猿问

区分不同种类的JSF托管Bean

我最近读了Neil Griffin撰写的《区分不同类型的JSF托管豆》中的这篇文章,这使我开始思考自己的应用程序中不同bean之间的区别。快速总结要点:


Model Managed-Bean:这种类型的Managed-Bean参与MVC设计模式的“模型”关注。当您看到“模型”一词时,请考虑一下数据。JSF模型bean应该是遵循JavaBean设计模式且具有getters / setter封装属性的POJO。


支持Managed-Bean:这种类型的Managed-Bean参与MVC设计模式的“视图”关注。支持bean的目的是支持UI逻辑,并且与JSF视图或Facelet组合中的JSF表单具有1 :: 1的关系。尽管它通常具有带有关联的getter / setter的JavaBean样式的属性,但它们是View的属性,而不是基础应用程序数据模型的属性。JSF支持bean也可以具有JSF actionListener和valueChangeListener方法。


Controller Managed-Bean:这种类型的Managed Bean参与了MVC设计模式的“ Controller”关注。控制器bean的目的是执行某种业务逻辑并将导航结果返回给JSF导航处理程序。JSF控制器bean通常具有JSF动作方法(而不是actionListener方法)。


支持托管的Bean:这种类型的Bean在MVC设计模式的“视图”方面“支持”一个或多个视图。典型的用例是向JSF h:selectOneMenu下拉列表提供一个ArrayList,这些列表出现在多个JSF视图中。如果下拉列表中的数据特定于用户,则Bean将保留在会话范围内。


实用程序托管Bean:这种类型的Bean为一个或多个JSF视图提供某种“实用程序”功能。一个很好的例子就是FileUpload bean,它可以在多个Web应用程序中重用。


这对我来说很有意义,在过去的几个小时中,我一直在重构代码,并针对用户登录提出了以下建议:


这AuthenticationController是Controller Managed-Bean的示例。它是请求范围的,具有两个用于设置用户名和密码的获取器和设置器,以及两个导航方法,authenticate和logout,在成功登录后将用户导航到其专用区域,或在注销时将其导航到主页。


这UserBean是Support Managed-Bean的示例。它是会话作用域的,并具有一个User带有getter和setter 的类的实例(如果未通过身份验证,则为null),仅此而已。


该AuthenticationController有这个用户作为托管属性(@ManagedProperty(value = "#{userController.user} private User user;)。身份验证成功后,AuthenticationController会将托管属性设置为具有用于登录的相应用户名的实际用户实例。


如果User该类具有带有组名的列表,那么任何新bean都将能够将用户作为托管属性,并提取所需的数据,例如组成员身份。


这样就可以解决关注点分离问题吗?


白衣非少年
浏览 346回答 2
2回答

心有法竹

我不能足够赞成这个答案!我读了同一篇文章的一百倍,并花了一些时间来尝试遵循它的建议,直到我放弃,因为对我来说重复如此多的事情对我来说没有任何意义……
随时随地看视频慕课网APP

相关分类

Java
我要回答