JPA实体Bean的JSF?JPA实体Bean的JSF?(JPA Entity as JSF Bea

2019-05-13 15:21发布

是否有意义使用实体作为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);
    }

    // ...
}

Answer 1:

可以这样做。 这是技术上是可行的。 但它确实(设计)在功能上没有任何意义。 你基本上是紧耦合与控制器模型。 通常,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框架进行管理?


文章来源: JPA Entity as JSF Bean?