将 JSF 理解为 MVC 框架

我正在阅读JSF,我感到困惑为什么JSF是一个MVC框架(或者至少哪些部分属于哪个“字母”)。

我看了这个问题:JSF MVC框架中的MVC是什么组件?

我在那里读到,如果你不在聚合视图中查看它,模型是你的实体,视图是你的XHTML代码,控制器是托管Bean。嗯。。。好吧,但是视图不是经常依赖于执行进一步的业务逻辑调用,例如返回一组实体,描述是否仍然合适?

我读过的一本书将其描述为托管bean是某种“消息”带来器,Faces Servlet(控制器)使用它来调用业务层(模型),然后XHTML代码就是视图。

有很多解释和差异,所以我不知道哪个或如何理解它。


答案 1

在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 仍然是模型,但实际上它是位于模型、视图和控制器中间的管道元素。由于它执行某些可能被视为某些控制器任务的任务,因此经常误认为是控制器。但是,如前所述,这是不正确的。它还可以执行一些模型任务,偶尔也可以执行一些视图逻辑。

另请参阅:


答案 2

在极简主义形式中,它是:

  • 模型:用于持久性(Hibernate,JPA等)和数据建模(Java Beans)的任何内容。
  • 查看:xhtml,jsp等。
  • 控制器:Mananaged Beans。

JSF 使您能够控制您的请求/响应。创建模型/视图的方式并不直接连接到框架 MVC 概念。这只是一个选择问题。MVC 概念与代码组织有关。

类似地,Struts是一个MVC框架,但它主要作为控制器工作。

我想我帮助你更好地澄清你的想法。


推荐