我的问题是使用列表而不是地图解决的,但我在这里写下来因为我不明白地图有什么问题。
我在视图中定义了一个地图( myView.java ):
private Map<String, String> myMap = new HashMap<String, String>();
,它由一个从commandButton操作调用的方法动态填充:
<p:commandButton
value="#{txt['form.view']}"
process="@form"
icon="ui-icon-search"
action="#{myView.populateMap}"
update=":myForEach"
/>
我将一个项目放入地图中,使用动态键和值:
public void populateMap(){
myMap.clear();
myMap.put(getCode(this.param), getDetails(this.param));
}
当我循环播放此地图时,它不会打印预期的内容:
WholeMap: #{myView.myMap}<br/>
<c:forEach items="#{myView.myMap}" var="item">
Key: #{item.key} Value: #{item.value}<br/>
</c:forEach>
出乎意料的是,整个地图正确地打印在第一行,但当我尝试在forEach中打印时,项目键和值为空。
从视图类更改后,似乎无法找到地图的内容。如果我再次单击commandButton,只有当 populateMap 方法将相同的项放入地图时,它才能成功打印出预期的内容。