在地图上使用 <f:selectItems> 时获取 <p:selectOneMenu> 的标签
Get label of <p:selectOneMenu> when using <f:selectItems> on Map
我在 Map
上使用 <f:selectItems>
时试图获取 <p:selectOneMenu>
的标签。
查看:
<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);
//...
}
我怎样才能做到这一点?
这表明模型已损坏。您应该使用 List<Region>
而不是 Map<K, V>
,其中 Region
是具有 K
和 V
属性的实体(并重命名当前具有 class 姓名 Region
).
否则,只需循环遍历映射以按值获取键。
例如
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;
}
然后您将其用作
String key = getKey(region.getRegions(), userRegion);
但是,您的模型又坏了。最好立即修复模型,而不是引入丑陋的解决方法。
我在 Map
上使用 <f:selectItems>
时试图获取 <p:selectOneMenu>
的标签。
查看:
<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);
//...
}
我怎样才能做到这一点?
这表明模型已损坏。您应该使用 List<Region>
而不是 Map<K, V>
,其中 Region
是具有 K
和 V
属性的实体(并重命名当前具有 class 姓名 Region
).
否则,只需循环遍历映射以按值获取键。
例如
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;
}
然后您将其用作
String key = getKey(region.getRegions(), userRegion);
但是,您的模型又坏了。最好立即修复模型,而不是引入丑陋的解决方法。