【问题标题】:JSF <f:ajax> tag not rendering my form after submittingJSF <f:ajax> 标签在提交后未呈现我的表单
【发布时间】:2015-04-26 15:54:07
【问题描述】:

在调用删除这些元素之一的托管 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);
}

我希望我的表单被渲染并且不再显示被删除的元素。

【问题讨论】:

    标签: ajax jsf jsf-2


    【解决方案1】:

    您不能以这种方式从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>
    

    【讨论】:

    • 我不明白该怎么做。我必须删除 commandLink 标签吗?我怎样才能调用这个动作?
    • 抱歉太简短了,我更新了答案并添加了代码。
    • 您的应用程序是否在调试模式下点击了删除方法?
    • 是的,事实上,如果我重新加载页面,删除的元素就会消失。
    • 你能切换到myfaces试试吗?可能是与此类似/相关的问题:stackoverflow.com/questions/22272271/…
    【解决方案2】:

    解决了。我犯了一个愚蠢的错误。我没有在托管 Bean 中重新加载列表(在 @PostConstruct 方法中填充),现在正在使用 t:dataList 标记。

    【讨论】:

    • 它是否按照问题中的说明工作(意思是:&lt;f:ajax render="outputprice outputname"/&gt;),还是使用render="@form"
    • 没有像问题中发布的那样尝试。我会试试的。
    猜你喜欢
    • 1970-01-01
    • 2013-10-06
    • 2011-02-15
    • 2011-07-19
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多