2010-10-15 47 views
4

我试图在我的应用程序(Seam/RichFaces)中显示一个购物车,并在每个项目旁边包含一个“从购物车中删除”<a4j:commandLink />以从购物车中删除该项目。当我点击链接时,它应该重新展示购物车内容以显示该物品已被移除。但是,当我点击链接时,没有任何反应。购物车由包含项目的操作中的ArrayList支持。我可以在我的动作中看到呼叫,所以我知道该项目已被删除 - 并且,如果我刷新页面,我看到它已被删除。我在下面的代码中做错了什么,导致页面的这一部分不能正确地重新渲染?<a4j:commandLink> Not Rerendering

更新:看起来好像它会正常放回,但不是在所有情况下。如果我的购物车中有超过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> 

回答

10

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

相关问题