作为JSFbean的JPA实体?
使用实体作为JSF支持bean有意义吗作为JSFbean的JPA实体?,jsf,entity,backing-beans,Jsf,Entity,Backing Beans,使用实体作为JSF支持bean有意义吗 @Entity @ManagedBean @ViewScoped public class User { private String firstname; private String lastname; @EJB private UserService service; public void submit() { service.create(this); } // ..
@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托管bean(控制器)的属性。这将保留代码。您不希望在所有位置重复相同的属性,更不用说在诸如bean验证约束之类的属性上的注释了
例如
使用此Facelets页面(视图):
...
另见:
@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;
}
}
<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>