在地图上使用 <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 是具有 KV 属性的实体(并重命名当前具有 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);

但是,您的模型又坏了。最好立即修复模型,而不是引入丑陋的解决方法。