JSF MVC框架中的MVC是什么组件?


Answers:


150

这取决于观点(双关语意)。

在总体架构图中,您自己的JSF代码是V

M-业务域/服务层(例如EJB / JPA / DAO)
V-您的JSF代码
C -FacesServlet

在开发人员图中,体系结构V可以如下划分:

M-实体
V -Facelets / JSP页面
C-托管bean

在较小的客户图中,开发人员V可以如下划分:

M -JSF组件树
V-呈现的HTML输出
C-客户端(Web 浏览器)

在较小的JavaScript图片中,客户端V可以如下划分:

M -HTML DOM树
V-可视表示
C-事件侦听器功能(最终用户交互和Ajax)

所以基本上是M(M(M(MVC)C)C)C;)

请注意,一些入门者,甚至某些(非常基础的)教程都在托管Bean中混合/复制/展平实体的属性,这将有效地使控制器成为模型。不用说这是较差的设计(即不是干净的MVC设计)。

以下答案中的代码段说明了正确的MVC方法:

在《Java EE 8中的JSF权威指南》一书第8章“ Backing bean”(第276页)中,下面的Venn图用于说明MBean范式中Backing bean在与JSF开发人员相关的上下文中的位置。 。版权免责声明:书是我写的,图片是我创造的。

在此处输入图片说明


+1完全同意这两种哲学,大拱门通常更是如此。实时查看项目。
Jigar Joshi

2
没有得到双关语,仍然有争议
Nick

@JeffLee在我的工作中,由于托管bean控制xhtml视图,我们看到了它。托管bean可以与模型代码进行对话,以根据视图的需要获取和保存实体。
djeikyb

5
@Jeff:只有在其中混合了模型属性时,才可以。与在一样,使用<h:inputText value="#{register.username}">代替<h:inputText value="#{register.user.name}">
BalusC

完全同意这个对@Jigar不利的答案。IMO,托管bean不仅仅是模型。它们是FacesServlet的扩展,所有交互都在其中进行。此外,他们都能够保持状态,但更是C,而不是M.
复刻骑自行车的人

36

中号奥德尔将是你的ManagedBean

V iew是jspXHTML(那么您可以在此处容纳各种视图)

ç ontroller会FacesServlet

更新,希望这张照片有更多帮助

在此处输入图片说明


4
+1是有道理的,尽管我可能会说您的模型是实体(如果有的话),而控制器是受管Bean(除了FacesServlet之外)
Shervin Asgari 2011年

@Jigar好吧,如果它FacesServlet是一个控制器,我不能扩展它。我不能拥有自己的控制器...我同意Shervin的观点,托管Bean是控制器。谢尔文,发布您自己的替代答案如何?
yegor256

1
它是卧底的FacesServlet,正在控制。
Jigar Joshi

@Jigar 维基百科说:“控制器接受来自用户的输入,并指示模型和视口基于该输入执行操作。” 我怀疑FacesServlet“指导模型”,对吗?
yegor256

4
Undercover FacesServlet从请求,会话,应用程序上下文接收所有数据(在上层称为bean)并对其进行处理。
Jigar Joshi


-1

Java Server Faces是一个MVC Web框架,其中的MVC组件如下所示,

  1. 模型 -这是用@ManagedBean注释的托管Bean类,该类具有保存数据以及相应的getter和setter的属性。托管bean类还可以包含业务逻辑,也称为支持bean,可以具有不同的作用域,例如请求,会话,应用程序。

  2. 视图 -显示给客户端的用户界面,即.xhtml文件。它从托管bean获取数据,并将其呈现为响应。

  3. 控制器 -javax.servlet.webapp.FacesServlet是集中式控制器类,它基本上是一个servlet。首先到达JSF的任何请求都将发送到FacesServlet控制器。与在其中编写我们自己的控制器类的JSP不同,在JSF中,控制器servlet是框架的固定部分,我们不编写它。

MVC流程-

在此处输入图片说明


这与被提议的36个问题相同。如果您认为答案可以更明确,请对其进行编辑
-Kukeltje

@Kukeltje我相信我的答案有更多的解释,而不仅仅是命名MVC组件。
Hetal Rachh

很少有更多解释... 1:并不是真的,因为“包含数据”不是最好的东西(应该在实体中),businesslogic,也不是最好的东西,因为它们应该在服务中使用(请参见最受好评的答案中的其他链接) ),2:不多得多3:更多文本但缺少其他答案的图像,该图像比您添加的文本更清晰...
Kukeltje

@Kukeltje谢谢,但是我只是JSF的初学者。
Hetal Rachh

没问题。我已经使用了很长时间了,取得了巨大的成功。获得Bauke Scholtz和Arjan Thijms撰写的Java ee 8和jsf书。很棒的阅读和教程,但同时也阅读了Stackoverflow中所有> 25投票赞成的Q / A,请记住它们的存在并以jsf 2.3和
Kukeltje
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.