JSF HashMap输出错误

时间:2012-11-23 14:53:21

标签: java jsf hashmap key

我参与了一个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 &euro;</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的故障单,但那里出了什么问题?

请帮帮我!

2 个答案:

答案 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)