JSF <f:ajax>标记在提交后不呈现我的表单

时间:2015-04-26 15:54:07

标签: ajax jsf jsf-2

我试图在调用我正在删除其中一个元素的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);
}

我想要渲染我的表单,而不是再次显示已删除的元素。

2 个答案:

答案 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标记。