【发布时间】:2013-10-17 20:57:39
【问题描述】:
假设我有一个名为Customer 的实体。 Customer 对象可以在应用程序中创建、删除或编辑。
我创建了一个表示Customer 列表的复合组件,这样我就可以在我的应用程序的多个地方重用它。
<!-- INTERFACE -->
<cc:interface>
<cc:attribute name="val" required="true"/>
</cc:interface>
<!-- IMPLEMENTATION -->
<cc:implementation>
<p:selectOneMenu value="val">
<f:selectItems value="#{appManager.customers}"
var="cust"
itemLabel="#{cust.name}"/>
</p:selectOneMenu>
</cc:implementation>
此组件使用 EJB 绑定到 @ApplicationScope 托管 bean。
@Named
@ApplicationScoped
public class AppManager {
@EJB
private CustomerFacade customerFacade;
public AppManager() {
}
public List<Customer> customers(){
return customerFacade.findAll();
}
}
但是每次使用这个组件时,都会获取Customer 表,对吗?我怎样才能更有效地检索这个Customer 集合?我想过使用延迟加载集合:
@Named
@ApplicationScoped
public class AppManager {
@EJB
private CustomerFacade customerFacade;
private List<Customer> customers;
/**
* Creates a new instance of AppManager
*/
public AppManager() {
}
public List<Customer> getCustomers() {
if(customers == null){
customers = customerFacade.findAll();
}
return customers;
}
}
但是应用于数据库的更改不会反映在集合中。
对于这种情况下的常用技术或最佳做法,我将不胜感激。谢谢:)
【问题讨论】:
标签: java jsf-2 jpa-2.0 ejb-3.1 jsf-2.2