&LT; A4J:commandLink&GT;不重新渲染 [英] <a4j:commandLink> Not Rerendering
问题描述
我想在我的应用程序(SEAM / RichFaces的)显示购物车,并收录了从购物车中删除&LT; A4J:commandLink /&GT;
旁边的每个项目从购物车中删除项目。当我点击链接它应该重新呈现在车的内容显示,该项目已被删除。然而,当我点击链接,没有任何反应。该购物车是由我的行动一个ArrayList包含的项目支持。我可以看到在我的行动电话,所以我知道该项目已被删除 - 而且,如果我刷新我看到它已被删除的页面。我做错了什么在下面,我的code导致这部分页面无法重新呈现正确?
更新:这好像它会重新解析正常,但不是在所有情况下。如果我有我的车超过1项,并删除任何项目,但最近添加的项目也重新呈现正常。如果我只有一个项目在购物车,或者我尝试删除最近添加的项目,它无法重新呈现任何内容。什么任何想法是怎么回事?
&LT; S:DIV的styleClass =cart_bag呈现=#{identity.loggedIn}&GT;
&LT; H6类=头&GT;&LT; H:的outputText值=你的购物车/&GT;&LT; A:状态
forceId =真正的ID =shoppingCartStatus&GT;
&LT; F:面NAME =开始&GT;
&LT; H:graphicImage的价值=/图片/ AJAX-loader.gif的styleClass =右/&GT;
&LT; / F:面&GT;
&LT; / A:状态&gt;&LT; / H6&GT;
&所述氏:格的id =shoppingCartItems&GT;
&LT; S:片段
渲染=#{shoppingCart.shoppingCartContents.size()乐0}&GT;
&LT; P&GT;&LT; S:跨度的styleClass =黑体&GT;
&LT; H:的outputText风格=颜色:#FFF;
值=您的购物车是空的/&GT;
&LT; BR /&GT;
&LT; BR /&GT;
&LT; BR /&GT;
&LT; / S:跨度&GT;&LT; / P&GT;
&所述; /秒:片断&gt;
&LT; S:片段
渲染=#{shoppingCart.shoppingCartContents.size()GT 0}&GT;
&LT; H:形式GT;
&LT; UL&GT;
&LT; UI:重复值=#{shoppingCart.shoppingCartContents}
VAR =cartItem&GT;
&LT;李&GT;&LT; S:DIV的styleClass =拇指&GT;
&LT; A HREF =detail.html&GT;&LT; IMG SRC =../图像/ cart_thumb.gif
中高音=/&GT;&所述; / a取代;
&LT; / S:DIV&GT; &LT; S:DIV的styleClass =降序&GT;
&LT; S:链接查看=/的index.xhtml的styleClass =黑体
值=#{cartItem.name}&GT;
&LT; F:参数名称=ctxid值=#{cartItem.uniqueIdentifier}/&GT;
&LT; / S:链接&GT;
&LT; P&GT;&LT;跨度类=黑体&GT;单价:LT; / SPAN&GT; $ 629 LT; / P&GT;
&LT; / S:DIV&GT;&LT; A:commandLink ID =removeItemFromCartBtn
行动=#{shoppingCart.removeFromShoppingCart()}
的styleClass =CRO公司重新呈现=shoppingCartItems
状态=shoppingCartStatus&GT;
&LT; F:参数名称=ctxid值=#{cartItem.uniqueIdentifier}/&GT;
&LT; H:graphicImage的价值=/图片/ remove.png/&GT;
&LT; / A:commandLink&GT;&LT; /李&GT;
&LT; / UI:重复&GT;
&LT; / UL&GT;
&LT; /小时:形式GT;
&所述; /秒:片断&gt;
&LT; / S:DIV&GT;
&LT; S:DIV的styleClass =清除&GT;&LT; / S:DIV&GT;
&LT; S:片段
渲染=#{shoppingCart.shoppingCartContents.size()GT 0}&GT;
&其中,P类=左边总额大胆&GT;&LT; H:的outputText
值=总计:#{shoppingCart.shoppingCartTotal}/&GT;&LT; / P&GT;
&所述; A HREF =cart.html类=crtbtn右&GT;&其中;跨度&GT;结帐&所述; /跨度&GT;&所述; / a取代;
&所述; /秒:片断&gt;
&LT; / S:DIV&GT;
解决。我裹有问题的JSF code在&LT; A4J:outputPanel ajaxRendered =真/&GT;
,一切都开始按预期工作
I'm trying to display a shopping cart in my application (Seam/RichFaces), and have included a "remove from cart" <a4j:commandLink />
next to each item to remove the item from the cart. When I click the link it is supposed to rerender the cart contents to show that the item has been removed. However, when I click the link, nothing happens. The cart is backed by an ArrayList in my action that contains the items. I can see the call in my action, so I know the item has been removed -- and, if I refresh the page I see it has been removed. Am I doing something wrong in my code below that is causing this section of the page not to rerender properly?
UPDATE: It seems as though it will rerender properly, but not in all circumstances. If I've got more than 1 item in my cart and remove any item but the most recently added item it rerenders properly. If I only have one item in the cart, or I try and remove the most recently added item, it fails to rerender anything. Any thoughts on what's going on here??
<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>
Solved. I wrapped the offending JSF code in a <a4j:outputPanel ajaxRendered="true" />
and everything began working as expected.
这篇关于&LT; A4J:commandLink&GT;不重新渲染的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!