10

将实体用作 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);
    }

    // ...
}
4

1 回答 1

21

可以这样做。这在技术上是可行的。但它(设计)在功能上没有任何意义。您基本上将模型与控制器紧密耦合。通常,JPA 实体(模型)是 JSF 托管 bean(控制器)的属性。这使代码保持干燥。您不想在所有地方复制相同的属性,更不用说对诸如 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>

也可以看看:

于 2012-04-24T15:50:37.817 回答