我试图在调用我正在删除其中一个元素的Managed Bean操作后呈现我的元素列表。 这是我的jsf页面代码:
<div class="container">
<div class="starter-template">
<h:form id="productslist">
<div class="row">
<ui:repeat value="#{listProductsManagedBean.products}" var="product">
<div class="col-md-4">
<h1>
<h:outputText id="outputname" value="#{product.name}"/>
</h1>
<p>
<h:outputText id="outputprice" value="#{product.price} #{product.currency}"/>
</p>
<p>
<h:commandLink class="btn btn-primary btn-lg" value="Delete" action="#{listProductsManagedBean.delete}">
<f:ajax render="outputprice outputname"/>
<f:param name="id" value="#{product.id}" />
</h:commandLink>
</p>
</div>
</ui:repeat>
</div>
</h:form>
</div>
</div>
这是我调用的托管bean操作:
public void delete(){
ProductEntity product;
product = productEntityFacade.find(id);
productEntityFacade.remove(product);
}
我想要渲染我的表单,而不是再次显示已删除的元素。
答案 0 :(得分:0)
您无法以这种方式从ui:repeat
中删除已删除的元素。请尝试render="@form"
。
此外,在execute="@this"
中使用f:ajax
是一种更好的做法。你不需要提交整个表格进行删除操作。
<h:commandLink class="btn btn-primary btn-lg" value="Delete" action="#{listProductsManagedBean.delete}">
<f:ajax execute="@this" render="@form"/>
<f:param name="id" value="#{product.id}" />
</h:commandLink>
答案 1 :(得分:0)
解决。我犯了一个愚蠢的错误。我没有在Managed Bean中重新加载列表(在@PostConstruct
方法中填充),现在正在使用t:dataList
标记。