JSF的ManagedEntity与UnManagedEntity的优势

时间:2013-05-19 10:00:38

标签: jsf entity managed-bean

我最近开始研究JSF,并且通过以下两种方式偶然发现将实体包含到Controller Managed bean中。一个是将实体直接注入ManagedBean,另一个实体作为非托管bean,只是作为在@PostConstruct初始化的实例变量。

这种或那种方式有哪些优点/缺点?第二种通常表现为“正确的方式”,但似乎维护起来更复杂。

非管理实体

@Entity
public class Book {
 //...attributes
}

@ManagedBean
public class BookController {

   private Book book;

   @PostConstruct
   public void init() {
     book = new Book();

   }


}

管理实体

@Entity
@ManagedBean
public class Book implements Serializable {
      //...attributes
}

@ManagedBean
public class BookController {

     @ManagedProperty(name="#{customer}")
     private Book book;

}

1 个答案:

答案 0 :(得分:2)

实体拥有自己的生命周期,并且已由JPA管理。不推荐(CDI规范强烈禁止它)将实体声明为托管bean。最好保留对控制器中实体的引用 - 在您的情况下为非托管实体。