假设我有一个名为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>
@ApplicationScope
该组件使用 EJB绑定到托管 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;
}
}
但是随后应用于数据库的更改不会反映在集合上。
对于这种情况下的常用技术或最佳实践,我将不胜感激。谢谢 :)