JSF <f:ajax> 标签在提交后不呈现我的表单
JSF <f:ajax> tag not rendering my form after submitting
我正在尝试在调用删除其中一个元素的托管 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);
}
我希望呈现我的表单并且不再显示已删除的元素。
您无法通过这种方式从 ui:repeat
中删除已删除的元素。请尝试 render="@form"
.
此外,在 f:ajax
中使用 execute="@this"
是更好的做法。您无需提交整个表单即可进行删除操作。
<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>
已解决。我犯了一个愚蠢的错误。我没有在托管 Bean 中重新加载列表(在 @PostConstruct
方法中填充),现在正在使用 t:dataList
标记。
我正在尝试在调用删除其中一个元素的托管 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);
}
我希望呈现我的表单并且不再显示已删除的元素。
您无法通过这种方式从 ui:repeat
中删除已删除的元素。请尝试 render="@form"
.
此外,在 f:ajax
中使用 execute="@this"
是更好的做法。您无需提交整个表单即可进行删除操作。
<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>
已解决。我犯了一个愚蠢的错误。我没有在托管 Bean 中重新加载列表(在 @PostConstruct
方法中填充),现在正在使用 t:dataList
标记。