您需要在初始请求时隐藏datatable,并让commandlink在datatable的
rendered
属性取决于。
小脸:
<h:form>
<h:commandLink value="show" action="#{showProducts.toggleShow}">
<f:ajax render="products"/>
</h:commandLink>
<h:panelGroup id="products">
<h:dataTable var="product" value="#{showProducts.products}" rendered="#{!showProducts.show}">
<h:column>#{product.name}</h:column>
</h:dataTable>
</h:panelGroup>
</h:form>
豆子:
private boolean show;
public void toggleShow() {
show = !show; // Or just show = true;
}
public boolean isShow() {
return show;
}
也就是说,在getter中运行昂贵的业务/数据库逻辑并不是最佳实践。在比恩的一生中,getter可以被称为不止一次。而是在bean的构造函数或
@PostConstruct
方法。
private List<Product> products;
@PostConstruct
public void init() {
products = this.getProductManager().getProducts();
}
public List<Product> getProducts() {
return products;
}
或者,如果它真的需要懒洋洋地加载,那么最好这样做:
private List<Product> products;
public List<Product> getProducts() {
if (products == null) {
products = this.getProductManager().getProducts();
}
return products;
}