这是一个非常主观的问题。 我个人不同意该文章,并发现它给初学者提供了非常不好的建议。
Model Managed-Bean:这种类型的Managed-Bean参与MVC设计模式的“模型”关注。 当您看到“模型”一词时,请考虑一下数据。 JSF模型bean应该是遵循JavaBean设计模式且具有getters / setter封装属性的POJO。
我绝对不会制造或称其为托管bean。 只需使其具有的属性即可,例如DTO或JPA @SessionScoped。
支持Managed-Bean:这种类型的Managed-Bean参与MVC设计模式的“视图”关注。 支持bean的目的是支持UI逻辑,并且与JSF视图或Facelet组合中的JSF表单具有1 :: 1的关系。 尽管它通常具有带有关联的getter / setter的JavaBean风格的属性,但它们是View的属性,而不是基础应用程序数据模型的属性。 JSF支持bean也可以具有JSF actionListener和valueChangeListener方法。
这样,您就可以重复复制和映射托管Bean中实体的属性。 这对我来说毫无意义。 如前所述,只需将实体设置为托管bean的属性,然后让输入字段像而不是@SessionScoped一样直接引用它即可。
Controller Managed-Bean:这种类型的Managed Bean参与了MVC设计模式的“ Controller”关注。 控制器bean的目的是执行某种业务逻辑并将导航结果返回给JSF导航处理程序。 JSF控制器bean通常具有JSF动作方法(而不是actionListener方法)。
这几乎描述了/@SessionScoped @ManagedBean类。 是否允许使用事件侦听器方法取决于它们是否特定于绑定到Bean的视图和/或用于其工作的方式取决于Bean的状态。 如果是,则它们属于bean。 如果不是,则它们应该是任何接口的独立实现,但绝对不是托管Bean。
支持被管理的Bean:这种类型的Bean在MVC设计模式的“视图”方面“支持”一个或多个视图。 典型的用例是向JSF h:selectOneMenu下拉列表提供一个ArrayList,这些列表出现在多个JSF视图中。 如果下拉列表中的数据特定于用户,则Bean将保留在会话范围内。
精细。 对于应用程序范围的数据(如下拉列表),只需使用 Bean;对于会话范围的数据,如登录的用户及其首选项,只需使用@SessionScoped537。
实用程序托管Bean:这种类型的Bean为一个或多个JSF视图提供某种“实用程序”功能。 一个很好的例子就是FileUpload bean,它可以在多个Web应用程序中重用。
这对我来说真的没有意义。 支持bean通常绑定到单个视图。 这听起来太像的实现,该实现将由在您选择的命令组件中使用。 绝对不是托管bean。
有关正确方法的启动示例,另请参阅:
我们的JSF Wiki页面中的Hello World示例
此答案中的“书店CRUD”示例
此答案中的“主从细节”示例
JSF服务层
JSF 2中的通信