我正在使用JSF 2和JPA 2(EclipseLink 2.3)开发一个项目。 在JSF 2中,我了解到我们必须将模型与Controller分开,并将相同的东西分离到View(感谢BalusC)。 但是现在有了从JPA生成的POJO,我想知道豆子,模型,它现在应该是pojos。
我的观点是我的.xhtml页面,用JSF 2.0开发,将与我的控制器交互,然后在控制器中调用DAO的类,然后在我的数据库中运行。
这是对的吗?我的意思是在MVC的概念? 我想做正确的事,任何提示?
提前致谢。
答案 0 :(得分:6)
“MVC”在JSF中有多种观点。从高级视图来看,Model由EJB / JPA表示,最终由DAO / DTO表示(如果有的话)。 View由您自己的JSF代码(由托管bean和Facelets模板构成)表示。 Controller由FacesServlet
表示。
从低级视图(高级视图的进一步细分),模型由实体或DTO表示。视图由Facelets模板表示。 Controller由托管bean表示。它基本上是M(MVC)C。
请注意,“POJO”是旧J2EE / Hibernate时代的一个相当传统的术语。如今,使用Java EE / JPA,它们被称为“实体”。是的,那是@Entity
Javabeans。 Als注意到有些人可能会选择使用普通的香草DTO而不是将你的JSF代码与服务层分离的实体。然后,JSF应该使用这些DTO作为模型,服务层应该在这些DTO和真实实体之间进行映射。这在我看来没有必要。 EJB3 / JPA2是一个非常流畅的API,它已经最大限度地减少了许多样板代码,你可以像在旧的J2EE时代那样使用DAO / DTO。使用Java EE 6及更高版本,并不需要能够将服务层切换到例如Spring。一切都经过深思熟虑和标准化。
答案 1 :(得分:1)
不完全正确。最好避免直接在视图中引用模型对象;你可以用DTO(数据传输对象)替换它们,它只是为了包含要显示的数据
答案 2 :(得分:1)
嗯,在我看来,这是不正确的。 XHTML页面是视图,但控制器是JSF servlet(已由框架提供),而您所谓的“控制器”实际上是模型(业务逻辑)。 JPA POJOS是模型的一部分(数据模型)。
从视图中,您应该调用业务逻辑以获取结果(如JPA Pojos)并直接在视图中使用它们(在架构中不需要转换为DTO)。
在您的模型中,您可以将业务逻辑组织起来(如果您认为需要DAO层,在业界非常常见,您可以放置它)。