Не рендеринг - PullRequest
       24

Не рендеринг

4 голосов
/ 15 октября 2010

Я пытаюсь отобразить корзину покупок в своем приложении (Seam / RichFaces) и добавляю «удалить из корзины» <a4j:commandLink /> рядом с каждым элементом, чтобы удалить элемент из корзины. Когда я нажимаю на ссылку, предполагается, что содержимое корзины будет повторно отображено, чтобы показать, что элемент удален Однако, когда я нажимаю на ссылку, ничего не происходит. В моем действии корзина поддерживается списком 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>

1 Ответ

10 голосов
/ 17 октября 2010

решаемая. Я обернул оскорбительный код JSF в <a4j:outputPanel ajaxRendered="true" /> и все стало работать как положено.

...