是否有意义使用实体作为JSF支持Bean?
@Entity
@ManagedBean
@ViewScoped
public class User {
private String firstname;
private String lastname;
@EJB
private UserService service;
public void submit() {
service.create(this);
}
// ...
}
还是更分别让他们从后台bean在年底将数据传输到实体?
@ManagedBean
@ViewScoped
public class UserBean {
private String firstname;
private String lastname;
@EJB
private UserService service;
public void submit() {
User user = new User();
user.setFirstname(firstname);
user.setLastname(lastname);
service.create(user);
}
// ...
}
你可以这样做。 这是技术上是可行的。 但它确实(设计)在功能上没有任何意义。 你基本上是紧耦合与控制器模型。 通常,JPA实体(模型)是JSF管理豆(控制器)的属性。 这使得代码DRY 。 你不希望在所有的地方,重复相同的属性,更别说注解那些如豆验证约束。
如
@ManagedBean
@ViewScoped
public class Register {
private User user;
@EJB
private UserService service;
@PostConstruct
public void init() {
user = new User();
}
public void submit() {
service.create(user);
}
public User getUser() {
return user;
}
}
与此Facelets的页面(视图):
<h:form>
<h:inputText value="#{register.user.email}" />
<h:inputSecret value="#{register.user.password}" />
<h:inputText value="#{register.user.firstname}" />
<h:inputText value="#{register.user.lastname}" />
...
<h:commandButton value="Register" action="#{register.submit}" />
</h:form>
也可以看看:
- 什么成分是MVC在JSF的MVC框架?
- JSF控制器,服务和DAO
- 在JSF的MVC矛盾的解释
- JSF 2重用在JPA实体中定义的验证?
- 为什么不应该实体bean由JSF框架进行管理?