我正在尝试使用for循环填充 LinkedHashMap ,以便在我的 jsf 页面中使用它,但是使用哈希表的“ put ”方法触发新的“ put ”方法时,将覆盖哈希图中保存的值。
方法就是这样;
public static List<String> valuesOfEnum() throws JsonProcessingException {
Map<String, Object> newArray = new LinkedHashMap<String, Object>();
List<String> jsonObj = new ArrayList<String>();
String json = null;
for(LimanTipi limanTipi : values()){
newArray.put("id", limanTipi.getId());
newArray.put("value", limanTipi.getValue());
json = new ObjectMapper().writeValueAsString(newArray);
jsonObj.add(json);
}
return jsonObj;
}
这是jsf代码;
<f:selectItems value="#{denizlimaniViewController.limanTipleri}" var="limanTipleri" itemValue="#{limanTipleri.id}" itemLabel="#{limanTipleri.value}"/>
使用这种方法,由于无法正确填充哈希图,因此将哈希图转换为列表,但这不是我想要的,因为我无法在<f:selectItems>
中使用此列表。
我需要使用 itemValue 和 itemLabel 代表哈希图中的“ id ”和“ value ”属性。
有没有办法解决这个问题?
谢谢
答案 0 :(得分:1)
密钥获取已被覆盖,因为您始终拥有密钥id
和value
。修改您的代码,如下所示:
for(LimanTipi limanTipi : values()){
newArray.put(limanTipi.getId(), limanTipi.getValue());
json = new ObjectMapper().writeValueAsString(newArray);
jsonObj.add(json);
}
编辑:
希望limanTipleri
是地图newArray
本身。然后,您需要修改代码,如下所示:
<f:selectItems value="#{denizlimaniViewController.limanTipleri.entrySet()}"
var="limanTipleri"
itemValue="#{limanTipleri.key}" itemLabel="#{limanTipleri.value}" />