在地图上使用<f:selectitems>时获取<p:selectonemenu>的标签</f:selectitems> </p:selectonemenu>

时间:2015-01-27 14:17:01

标签: jsf primefaces label selectonemenu

我在<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);

        //...

    }

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

这表明该模型已被破坏。您应该Map<K, V>而不是List<Region> Region,其中K是具有VRegion属性的实体(并重命名当前拥有该类的辅助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}}

但是,再次,你的模型被打破了。最好立即修复模型,而不是引入丑陋的变通方法。