ajax - <a4j :commandLink> Not Rerendering

标签 ajax jsf richfaces seam

我正在尝试在我的应用程序 (Seam/RichFaces) 中显示购物车,并包含“从购物车中删除”<a4j:commandLink />旁边的每个项目以从购物车中删除该项目。当我单击该链接时,它应该重新呈现购物车内容以显示该项目已被删除。但是,当我单击链接时,没有任何 react 。购物车由我的操作中包含项目的 ArrayList 支持。我可以在我的操作中看到调用,所以我知道该项目已被删除——而且,如果我刷新页面,我会看到它已被删除。我是否在下面的代码中做错了什么导致页面的这一部分无法正确重新呈现?

更新:似乎它会正确重新渲染,但并非在所有情况下。如果我的购物车中有超过 1 件商品并删除了除最近添加的商品以外的任何商品,它会正确重新呈现。如果我的购物车中只有一件商品,或者我尝试删除最近添加的商品,则无法重新呈现任何内容。关于这里发生了什么的任何想法?

<s:div styleClass="cart_bag" rendered="#{identity.loggedIn}">
        <h6 class="head"><h:outputText value="Your Shopping Cart" /><a:status
            forceId="true" id="shoppingCartStatus">
            <f:facet name="start">
                <h:graphicImage value="/images/ajax-loader.gif" styleClass="right" />
            </f:facet>
        </a:status></h6>
        <s:div id="shoppingCartItems">
            <s:fragment
                rendered="#{shoppingCart.shoppingCartContents.size() le 0}">
                <p><s:span styleClass="bold">
                    <h:outputText style="color: #FFF;"
                        value="Your shopping cart is empty" />
                    <br />
                    <br />
                    <br />
                </s:span></p>
            </s:fragment>
            <s:fragment
                rendered="#{shoppingCart.shoppingCartContents.size() gt 0}">
                <h:form>
                    <ul>
                        <ui:repeat value="#{shoppingCart.shoppingCartContents}"
                            var="cartItem">
                            <li><s:div styleClass="thumb">
                                <a href="detail.html"><img src="../images/cart_thumb.gif"
                                    alt="" /></a>
                            </s:div> <s:div styleClass="desc">
                                <s:link view="/index.xhtml" styleClass="bold"
                                    value="#{cartItem.name}">
                                    <f:param name="ctxid" value="#{cartItem.uniqueIdentifier}" />
                                </s:link>
                                <p><span class="bold">Unit Price:</span> $629</p>
                            </s:div><a:commandLink id="removeItemFromCartBtn"
                                action="#{shoppingCart.removeFromShoppingCart()}"
                                styleClass="cros" reRender="shoppingCartItems"
                                status="shoppingCartStatus">
                                <f:param name="ctxid" value="#{cartItem.uniqueIdentifier}" />
                                <h:graphicImage value="/images/remove.png" />
                            </a:commandLink></li>
                        </ui:repeat>
                    </ul>
                </h:form>
            </s:fragment>
        </s:div>
        <s:div styleClass="clear"></s:div>
        <s:fragment
            rendered="#{shoppingCart.shoppingCartContents.size() gt 0}">
            <p class="total left bold"><h:outputText
                value="Total:  #{shoppingCart.shoppingCartTotal}" /></p>
            <a href="cart.html" class="crtbtn right"><span>Checkout</span></a>
        </s:fragment>
    </s:div>

最佳答案

解决了。我将有问题的 JSF 代码包装在 <a4j:outputPanel ajaxRendered="true" /> 中一切都按预期开始工作。

关于ajax - <a4j :commandLink> Not Rerendering,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3938748/

相关文章:

mysql - 如何从 Ajax 调用或更改 SQL 查询中获取 "normalize"json 对象

javascript - 暂停当前​​的ajax调用,进行新的ajax调用,执行后继续默认的ajax调用

java - 是否可以在模式面板内提交表单并在同一模式面板内获取结果?

javascript - 使用 RichFaces 4 从 JavaScript 获取 DOM 元素

javascript - 使用onclick事件更改对象html标签的数据

php - 在不重新加载页面的情况下显示搜索结果

mysql - 如何管理与数据库的连接?

jsf - JSF 中具有嵌套渲染属性的嵌套 ajax

javascript - JavaScript、JSF 中的 "for"语句

java - 部分呈现 JSF 组件