在JSF和许多其他Web框架中,它通常不完全清楚它的哪些部分对应于MVC的哪个部分,部分原因是MVC模式最初是为桌面应用程序设计的。
在桌面应用程序中,节点 M、V 和 C 是最大连接图,这意味着每个部分都可以与其他每个部分进行通信。例如,如果模型发生更改,它可以将此更改推送到视图。这在桌面应用程序中有多个视图表示形式时尤其明显。更改一个,然后实时查看另一个更新。
由于Web应用程序的客户端/服务器和请求/响应性质,经典MVC不会将1:1映射到大多数Web框架。
具体而言,在 JSF 中,映射如下所示:
-
模型 - 服务/DAO 以及它们生成和使用的实体。它的入口点是受管 Bean,但在 Java EE(JSF 是其中的一部分)中,这些工件通常分别由 EJB 和 JPA 实现。
-
视图 - 将 UI 组件及其组成成一整页。这完全属于JSF的领域,分别由JSF和Facelets实现。
UIComponent
-
控制器 - 处理来自用户的命令和传入数据的流量警察,将其路由到正确的部分并选择要显示的视图。在JSF中,人们不编写此控制器,但它已经由框架提供(它是)。
FacesServlet
特别是最后一部分通常不是很好理解:在JSF中,你没有实现控制器。因此,后备 Bean 或任何其他种类的受管 Bean 不是控制器。
第一部分(模型)也并不总是被清楚地理解。业务逻辑可以由 EJB 和 JPA 实现,但从 JSF 的角度来看,值绑定引用的所有内容都是模型。这也是 JSF 生命周期阶段之一的名称的来源:。在此阶段,JSF 将数据从 UI 组件推送到模型中。从这个意义上说,(JSF)管理的Bean就是模型。Update Model
尽管 JSF 本身没有明确定义这个概念,但有一种经常重复出现的托管 Bean 的特定用法,称为后备 Bean。
对于 JSF 来说,支持 Bean 仍然是模型,但实际上它是位于模型、视图和控制器中间的管道元素。由于它执行某些可能被视为某些控制器任务的任务,因此经常误认为是控制器。但是,如前所述,这是不正确的。它还可以执行一些模型任务,偶尔也可以执行一些视图逻辑。
另请参阅: