迭代Map

时间:2016-11-05 19:28:54

标签: jsf

我尽可能地简化了我的问题。基本上,在我对其进行一些修改后,Map没有正确打印。

我有以下xhtml代码:

<c:forEach items="#{personController.groupedPersons}" var="personG">
    <p>
        <h:commandButton action="#{personController.removePersonGroup(personG.key)}" type="submit" value="Remove">
            <f:ajax render="@form" />
        </h:commandButton>
    </p>
    <p>#{personG.key}</p>
    <p>#{personG.value.size()}</p>
</c:forEach>

迭代Map并打印其信息。对于每个键,都有一个按钮,允许从地图中删除它。

在我的personController bean(@ViewScopedimplements Serializable)中使用此代码:

private HashMap<Integer, List<Person>> groupedPersons;

public void removePersonGroup(Integer age) {
    groupedPersons.remove(age);
}

我的测试数据有key = 20和3个值(Person)和key = 30和1个值(Person)。我第一次加载页面并打印地图时效果很好。

  • 第一次测试:我按下第二组按钮(按键30)。它会删除该组并使用剩余的组打印Map。然后按第一组按钮(按键20)。它删除了组并打印了Map,这是空的。
  • 第二次测试:我重新加载页面。我按下第一组按钮(按键20)。我的跟踪显示removePersonGroup()工作正常,groupedPersons只有key = 30的单个元素。但是,当ajax刷新表单时,XHTML显示#{personG.key} = 20(已删除)和#{personG.value.size()} = null(未显示任何内容,value为空)。我究竟做错了什么?我找不到问题

更新

在进行第二次测试并在XHTML中显示错误的详细信息后,当我用另一个按钮刷新表单并刷新整个页面时,现在XHTML正确显示了实际数据!因此必须有一些东西(并发相关?)使XHTML显示错误的数据。

0 个答案:

没有答案