我正在阅读JSF,我感到非常困惑,为什么JSF是MVC框架(或者至少哪些部分属于哪个“字母”)。
我看了这个问题:JSF MVC框架中的MVC是什么组件?
我在这里读过,如果您不以汇总视图查看它,则模型是您的实体,视图是您的XHTML代码,控制器是托管bean。嗯…好,但是视图不是经常依赖于执行进一步的业务逻辑调用(例如返回一组实体),描述是否仍然合适?
我读过的一本书将其描述为托管bean,是Faces Servlet(控制器)用来调用业务层(模型)的某种“消息”带来者,然后XHTML代码就是视图。
有太多的解释和差异,所以我不知道该如何理解。
之所以在JSF和许多其他Web框架中通常不十分清楚,其一部分与MVC的哪一部分相对应,部分原因在于MVC模式最初是为桌面应用程序设计的。
在桌面应用程序中,节点M,V和C是最大连接图,这意味着每个部分都可以与其他每个部分进行通信。例如,如果模型发生更改,则可以将此更改推送到视图。如果在桌面应用程序中有视图的多种表示形式,这尤其明显。更改一个,然后实时查看另一个更新。
由于Web应用程序的客户端/服务器和请求/响应性质,经典MVC不会将1:1映射到大多数Web框架。
具体来说,在JSF中,映射如下:
模型-服务/ DAO以及它们产生和使用的实体。入口点是托管bean,但是在Java EE(JSF是其一部分)中,这些工件通常分别由EJB和JPA实现。 视图-UI组件及其组成的整个页面。这完全属于JSF领域,UIComponent分别由JSF和Facelets实现。 控制器-交通警察处理用户的命令和传入数据,将其路由到正确的部分并选择要显示的视图。在JSF中,没有编写此控制器,但是框架已经提供了它(它是FacesServlet)。 特别是最后一部分经常没有被很好地理解:在JSF中,您不需要实现控制器。因此,后备bean或任何其他类型的托管bean都不是控制器。
第一部分(模型)也不总是很清楚。业务逻辑可以由EJB和JPA实现,但是从JSF的角度来看,值绑定引用的所有内容都是模型。这也是JSF生命周期阶段之一的名称来自:Update Model。在此阶段,JSF将数据从UI组件推送到模型中。从这个意义上讲,(JSF)受管bean是模型。
尽管JSF本身没有明确定义概念,但是托管Bean经常重复使用和特定使用,称为后备Bean。
对于JSF,支持bean仍然是模型,但是实际上,它是位于Model,View和Controller中间的管道元素。由于它执行的某些任务可能被视为某些控制器任务,因此通常会误认为它是控制器。但是,如前所述,这是不正确的。它还可以执行一些模型任务,偶尔也可以执行一些视图逻辑。