【问题标题】:Get label of <p:selectOneMenu> when using <f:selectItems> on Map在地图上使用 <f:selectItems> 时获取 <p:selectOneMenu> 的标签
【发布时间】:2015-01-27 14:17:00
【问题描述】:

Map 上使用&lt;f:selectItems&gt; 时,我试图获得&lt;p:selectOneMenu&gt; 的标签。

查看:

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

        //...

    }

我怎样才能做到这一点?

【问题讨论】:

    标签: jsf primefaces label selectonemenu


    【解决方案1】:

    这表明模型已损坏。您应该使用List&lt;Region&gt; 而不是Map&lt;K, V&gt;,其中Region 是具有KV 属性的实体(并重命名当前具有类名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;
    }
    

    然后您将其用作

    String key = getKey(region.getRegions(), userRegion);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      相关资源
      最近更新 更多