在JSF和JPA项目中使用POJO作为模型,是吗?

时间:2011-09-04 22:00:10

标签: java mysql jsf jpa jsf-2

我正在使用JSF 2和JPA 2(EclipseLink 2.3)开发一个项目。 在JSF 2中,我了解到我们必须将模型与Controller分开,并将相同的东西分离到View(感谢BalusC)。 但是现在有了从JPA生成的POJO,我想知道豆子,模型,它现在应该是pojos。

我的观点是我的.xhtml页面,用JSF 2.0开发,将与我的控制器交互,然后在控制器中调用DAO的类,然后在我的数据库中运行。

这是对的吗?我的意思是在MVC的概念? 我想做正确的事,任何提示?

提前致谢。

3 个答案:

答案 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层,在业界非常常见,您可以放置​​它)。