将JSF理解为MVC框架

Luc*_*uke 54 java model-view-controller jsf java-ee

我正在阅读JSF,我觉得为什么JSF是一个MVC框架(或者至少哪个部分属于哪个"字母")我感到很困惑.

我看了一下这个问题:JSF MVC框架中哪些组件是MVC?

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

我读过的一本书将其描述为托管bean,是Faces Servlet(Controller)用于调用业务层(Model)的某种"消息"bringer,然后XHTML代码就是视图.

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

Arj*_*jms 102

在JSF和许多其他Web框架中,它通常不完全清楚的部分原因是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仍然是模型,但实际上它是位于模型,视图和控制器中间的管道元素.因为它执行一些可能被视为某些控制器任务的任务,所以这通常被误认为是控制器.但是,如前所述,这是不正确的.它还可以执行一些模型任务,偶尔也可以执行一些视图逻辑.

也可以看看:

  • 您提供的链接已失效:http://www.sts.tu-harburg.de/pw-and-m-theses/2007/maab07.pdf (3认同)
  • 作为管道组件,支持bean通常注入一个服务,从中获取一个或多个实体.这些实体确实坚持下去.通过getter,返回整个实体.视图组件绑定到实体的各个属性.基本上,支持bean意味着服务代码保持"纯",并且在bean的范围内(通常是视图范围或请求范围)缓存数据. (2认同)

axc*_*dnt 7

它以极简主义的形式出现:

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

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

类似地,Struts是一个MVC框架,但它主要用作控制器.

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

  • 您好@KorayTugay Java Beans是带有getter和setter以及默认构造函数的简单类,而Managed Bean是一个轻量级的容器管理对象.Java Bean:https://en.wikipedia.org/wiki/JavaBean/index.html Managed Beans:http://docs.oracle.com/javaee/6/tutorial/doc/gjaam.html#gjacb (2认同)

Tar*_*rek 6

关于托管bean思想的有趣之处在于它既可以用作模型(MVC模式),也可以用作控制器(中介控制器MVC模式,也称为模型视图适配器),其中模型和视图不相互作用直.

在后一种情况下,路由机制不是控制器,因为业务逻辑包含在托管bean中,而Model完全是域模型.然后我们有:

  • 模型 - 包含域模型,在大多数情况下代表数据库中的表,通过DAO持久化.

  • View - 连接到bean的ui组件;

  • Controller - 包含业务逻辑并处理视图和模型之间通信的托管bean.

我认为有些人将中介控制器MVC混淆为普通的MVC,这会导致遇到不同的解释.