我在<p:selectOneMenu>
上使用<f:selectItems>
时尝试获取Map
的标签。
查看:
<p:selectOneMenu id="console" value="#{formBean.userRegion}" style="width:125px">
<f:selectItems value="#{formBean.region.regions}"></f:selectItems>
</p:selectOneMenu>
豆:
@Inject
private Region region; //where region.getRegions() is LinkedHashMap
public void regionChanged(AjaxBehaviorEvent e) {
//it prints map element value but I need element name
System.out.println("userRegion= " + userRegion);
//...
}
我怎样才能做到这一点?
答案 0 :(得分:1)
这表明该模型已被破坏。您应该Map<K, V>
而不是List<Region>
Region
,其中K
是具有V
和Region
属性的实体(并重命名当前拥有该类的辅助bean)名称public static <K, V> K getKey(Map<K, V> map, V value) {
for (Entry<K, V> entry : map.entrySet()) {
if (entry.getValue().equals(value)) {
return entry.getKey();
}
}
return null;
}
)。
否则,只需遍历地图即可按值获取密钥。
E.g。
String key = getKey(region.getRegions(), userRegion);
然后将其用作
{{1}}
但是,再次,你的模型被打破了。最好立即修复模型,而不是引入丑陋的变通方法。