我参与了一个JSF项目,我正在尝试查看购物车。用户的购物车可以包含存储在cartBean中的哈希映射(key = id,value = quantity)中的票证。在cart.xhtml中我尝试输出票证,在这里你可以看到代码:
<h:form>
<c:forEach var="tickets" items="#{cartBean.showTickets()}">
<hr/>
<div class="eight columns">
<div class="two column count">
<h:outputText style="font-size:30px;" value="#{tickets.value}"/>
</div>
<div class="two columns eventimg">
<a href="event.xhtml"><img src="img/dummy/event2.jpg" /></a>
</div>
<div class="six columns eventinfo">
<h4><a href="event.xhtml">Party Hard! </a></h4>
<p>05. Nov 2012</p>
</div>
<div class="two columns price">
<font style="font-size:30px;">35 €</font>
</div>
<div class="eight columns">
<h:outputText value="#{tickets.key}" escape="false"/>
<h:commandButton value="x" action="#{cartBean.removeFromCart(tickets.key)}"/>
</div>
</div>
</c:forEach>
</h:form>
在我尝试从购物车中删除一张票之前一切正常。如果我有两个不同的ID键,它们会在购物车中正确显示。当我尝试删除ID为1的票证时,只有ID为2的票证仍保留在购物车中,这是正确的。但是当我首先删除id 2时它虽然已从哈希映射中删除,但它在购物车中显示了票证2。刷新网站后,它会正确显示ID为1的故障单,但那里出了什么问题?
请帮帮我!
答案 0 :(得分:0)
我发现forEach出现问题,每次从2开始而不是实际id
答案 1 :(得分:0)
我在密集搜索网页后终于找到了解决方案。 enter link description here在这里你可以看到问题1的一些问题与我的相似。解决方案是使用因此您必须将地图写入Arraylist然后迭代列表。这里的代码是如何完成的:
public List<Entry<String, Integer>> getTicketsList() {
return new ArrayList(tickets.entrySet());}
顺便说一句。 ticket是我的html文件中的哈希映射,你必须使用<ui:repeat value="#{cartBean.ticketsList}" var="tickets">
cartBean是我的bean和ticketsList我的arrayList。希望你帮助别人,快乐解决B)