我试图在jsf页面中迭代一张地图。但是在修改了地图数据后,我发现总是在页面上删除最后一项。 具体步骤如下:
JSF:
<h:panelGroup id="myPanel" layout="block">
<c:forEach var="entry" items="#{myController.myMap}">
<div class="col-md-2">
<h:outputText value="#{entry.key.date}" >
<f:convertDateTime pattern="dd/MM/YYYY" timeZone="GMT+8" />
</h:outputText>
</div>
<div class="col-md-1">
<h:commandLink>
<i id="delete-holiday" class="glyphicon glyphicon-trash"></i>
<f:ajax event="click" listener="#{myController.delete(entry.key)}" render="myPanel"></f:ajax>
</h:commandLink>
</div>
</c:forEach>
</h:panelGroup>
java代码:
public void delete(Object date){
myMap.remove(date);
}
答案 0 :(得分:0)
我解决了它,原因是jsf foreach渲染中使用的java Map。我对jsf渲染机制一无所知。但我估计它只是将地图的大小改为Map修改而jsf正在渲染Map,但没有获得Map内容。这是一个一致性问题。它可能是jsf机制问题还是有更完美的解决方案来解决它。我不知道。但我已经采用了使用List但不使用Map来呈现数据的解决方案,它运行良好。如果您知道为什么没有映射工作,或者有更好的解决方案。请让我知道。
答案 1 :(得分:0)
我发现另一个解决方案可能会更好。在组件标记中添加一个 f:ajax 标记,如下所示:
savedArray