首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将JSF理解为MVC框架

将JSF理解为MVC框架
EN

Stack Overflow用户
提问于 2012-04-12 01:58:59
回答 4查看 57.8K关注 0票数 59

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

我看过这个问题:What components are MVC in JSF MVC framework?

我在那里读到,如果您不从聚合视图中查看它,那么模型就是您的实体,视图就是您的XHTML代码,控制器就是托管bean。Hmm...Ok,但是视图不是经常依赖于执行进一步的业务逻辑调用,例如返回一组实体,这样的描述仍然合适吗?

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

有太多的解释和不同之处,我不知道该怎么理解它。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-04-12 05:19:21

在JSF和许多其他web框架中,它的哪些部分对应于MVC的哪些部分通常并不完全清楚,部分原因是MVC模式最初是为桌面应用程序设计的。

在桌面应用程序中,节点M、V和C是最大连接图,这意味着每个部分都可以与其他部分进行通信。例如,如果模型更改,它可以将此更改推送到视图。在桌面应用程序中存在多个视图表示的情况下,这一点尤其明显。更改其中一个,并实时查看另一个更新。

由于web应用程序的客户端/服务器和请求/响应的性质,传统的MVC不会1:1映射到大多数web框架。

具体地说,在JSF中,映射如下:

  • Model -服务/DAO加上它们生产和使用的实体。这方面的入口点是托管bean,但在Java ( JSF是其中的一部分)中,这些构件通常是由EJB和JPA respectively.
  • View实现的- UI组件及其组合成一个完整的页面。这完全在JSF域中,并由JSF respectively.
  • ControllerUIComponent实现-交通警察处理来自用户的命令和输入数据,将其路由到正确的部分,并选择要显示的视图。在JSF中,不需要编写这个控制器,但是框架已经提供了这个控制器(它是FacesServlet).

特别是最后一部分通常不能很好地理解:在JSF中,您没有实现控制器。因此,支持bean或任何其他类型的受管bean是而不是控制器。

第一部分(模型)也并不总是被清楚地理解。业务逻辑可以由EJB和JPA实现,但从JSF的角度来看,值绑定引用的一切都是模型。这也是JSF生命周期阶段之一的名称来源:Update Model。在此阶段,JSF将数据从UI组件推送到模型中。从这个意义上说,(JSF)托管bean就是模型。

尽管JSF本身并没有显式地定义这个概念,但是托管bean有一种经常重复出现的特定用法,称为支持bean

对于JSF,支持bean仍然是模型,但实际上它是位于模型、视图和控制器中间的管道元素。因为它执行一些可能被视为控制器任务的任务,所以它经常被误认为是控制器。但是,正如前面所解释的,这是不正确的。它还可以执行一些模型任务,偶尔也可以执行一些视图逻辑。

另请参阅:

票数 107
EN

Stack Overflow用户

发布于 2012-04-12 02:05:13

在最简单的形式中,它是:

Java

  • 模型:用于持久化(Hibernate、JPA等)和数据建模(

Beans)的任何内容。Java视图: xhtml、jsp、管理Beans。

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

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

我想我可以帮助你更好地阐明你的想法。

票数 8
EN

Stack Overflow用户

发布于 2014-01-15 23:30:20

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

在后一种情况下,路由机制不是控制器,因为业务逻辑包含在托管bean中,而model严格是一个域模型。然后我们就有了:

  • Model -包含域模型,在大多数情况下表示数据库中的表,通过DAOs.
  • View持久化- ui组件,连接到bean;
  • Controller -包含业务逻辑并处理视图和模型之间的通信的托管bean。

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

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10111387

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档