在JSF MVC框架中谁是Model,View和Controller?
我正在尝试习惯JSF如何处理数据(来自弹簧背景)
我正在创建一个维护用户列表的简单示例,我有类似的东西
<h:dataTable value="#{userListController.userList}" var="u">
<h:column>#{u.userId}</h:column>
<h:column>#{u.userName}</h:column>
</h:dataTable>
Run Code Online (Sandbox Code Playgroud)
然后"控制器"有类似的东西
@Named(value = "userListController")
@SessionScoped
public class UserListController {
@EJB
private UserListService userListService;
private List<User> userList;
public List<User> getUserList() {
userList = userListService.getUsers();
return userList;
}
}
Run Code Online (Sandbox Code Playgroud)
而"服务"(虽然看起来更像是DAO)有
public class UserListService {
@PersistenceContext
private EntityManager em;
public List<User> getUsers() {
Query query = em.createQuery("SELECT u from User as u");
return query.getResultList();
}
}
Run Code Online (Sandbox Code Playgroud)
这是正确的做事方式吗?我的术语是对的吗?"服务"感觉更像是DAO?控制器感觉它正在做一些服务工作.
我看到很多将bean标记为实体bean(@Entity)和命名bean(CDI)的示例,以避免创建2个类(托管bean和实体bean)以及使用Bean Validation以便可以执行验证在客户端和服务器上.
那么我是否应该使用单个类,是否存在任何问题,或者我是否应该使用托管bean中的数据创建托管bean或服务层创建实体bean?
我开始学习 JSF,但首先我想了解它作为 MVC 框架的总体情况。
有几个得到很多赞同的答案解释了 JSF 中的 MVC 层,但它们通常是相互矛盾的。
BalusC的回答: JSF MVC框架中的MVC是什么组件?
在大的架构图中,您自己的 JSF 代码是V:
M - 业务领域/服务层(例如 EJB/JPA/DAO)
V - 您的 JSF 代码
C - FacesServlet在开发者图中,架构V依次可分如下:
M - 实体
V - Facelets/JSP 页面
C - 托管 bean
Jigar Joshi 在同一线程中的回答:
模型将是你的
ManagedBean视图将是
jsp,XHTML(好吧,你可以在这里容纳各种视图)控制器将是
FacesServlet
这里,对这个问题的另一种看法:
在 JSF 中,您不实现控制器。因此,支持 bean 或任何其他类型的托管 bean 都不是控制器。
还有一个,这次不是来自 Stackoverflow:
在 JSF 中,主控制器始终是 FacesServlet。子控制器被合并到各种控制元素标签实现中。您几乎从未在 JSF 中编写控制器代码,因为它都是预先提供的。因此,您只需提供视图模板 (xhtml) 和模型(支持 …
让我们从一个例子开始:
在我的JPA实体中
public class User {
@Pattern("^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$", message="invalidEmailResourceBundleKey")
private String email;
@Min(5, message="minimumResourceBundleKey")
private int age;
...
}
Run Code Online (Sandbox Code Playgroud)
在我的JSF Bean中
public class UserBean {
private User user;
// do i have to redefine it here, since it's already a part of the user ?
@@Pattern("^([0-9a-zA-Z]([-.\w]*[0-9a-zA-Z])*@([0-9a-zA-Z][-\w]*[0-9a-zA-Z]\.)+[a-zA-Z]{2,9})$")
public String getEmail() {
return user.getEmail();
}
public void setEmail(String s) {
user.setEmail(s);
}
// do i have to redefine it here, since it's already a part of the user ?
@Min(5, message="minimumResourceBundleKey")
public int …Run Code Online (Sandbox Code Playgroud)