2010-10-15 25 views
4

J'essaie d'afficher un panier dans mon application (Seam/RichFaces), et j'ai inclus un "enlever du panier" <a4j:commandLink /> à côté de chaque article pour retirer l'article du panier. Lorsque je clique sur le lien, il est censé rendre le contenu du panier pour montrer que l'objet a été supprimé. Cependant, quand je clique sur le lien, rien ne se passe. Le panier est soutenu par une ArrayList dans mon action qui contient les éléments. Je peux voir l'appel dans mon action, donc je sais que l'élément a été supprimé - et, si je rafraîchis la page, je vois qu'il a été supprimé. Est-ce que je fais quelque chose de mal dans mon code ci-dessous qui fait que cette section de la page ne se redresse pas correctement?<a4j: commandLink> Non-Rétablissement

MISE À JOUR: Il semble que le rendu se fera correctement, mais pas dans tous les cas. Si j'ai plus de 1 objet dans mon panier et que j'enlève tout élément, mais le dernier élément ajouté, il se reforme correctement. Si je n'ai qu'un seul article dans le panier, ou que j'essaie de supprimer l'article le plus récemment ajouté, il ne parvient pas à rediffuser quoi que ce soit. Des pensées sur ce qui se passe ici ??

<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> 

Répondre

10

Résolu. J'ai enveloppé le code JSF offensant dans un <a4j:outputPanel ajaxRendered="true" /> et tout a commencé à fonctionner comme prévu.