JPA Entity как JSF Бин?
Имеет ли смысл использовать сущности в качестве вспомогательных компонентов JSF?
@Entity
@ManagedBean
@ViewScoped
public class User {
private String firstname;
private String lastname;
@EJB
private UserService service;
public void submit() {
service.create(this);
}
// ...
}
Или лучше хранить их отдельно и в конце передавать данные из вспомогательного компонента в сущность?
@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);
}
// ...
}
1 ответ
Решение
Вы могли бы сделать это. Это технически возможно. Но это (дизайн) функционально не имеет никакого смысла. Вы в основном тесно связываете модель с контроллером. Обычно сущность (модель) JPA является свойством управляемого компонента JSF (контроллера). Это держит код СУХОЙ. Вы не хотите дублировать одни и те же свойства повсюду, не говоря уже об аннотациях таких, как ограничения проверки bean-компонентов.
Например
@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>