【问题标题】:How to set h:selectOneMenu label as value?如何将 h:selectOneMenu 标签设置为值?
【发布时间】:2011-09-01 12:52:29
【问题描述】:

我正在使用h:selectOneMenu,我想获取的不是 ID 值,而是标签。在支持 bean 中,我创建了 SelectItem 对象,这些对象用于加载 h:selectOneMenu

new SelectItem("id", "label");

我的查看代码:

<h:selectOneMenu value="#{Metadata.thema}">
    <f:selectItems value="#{ThemaBean.themes}" /> 
    <f:valueChangeListener type="com.schober.events.SelectThemaEvent" />
</h:selectOneMenu>

这里的代码将Metadata.thema设置为"id",但我需要设置"label"。我尝试使用label="#{Metadata.thema}",但它对我不起作用。

【问题讨论】:

    标签: java jsf selectonemenu


    【解决方案1】:

    然后只需使用标签作为值。使用带有单个参数的 SelectItem 构造函数:

    new SelectItem("label");
    

    这样标签将被用作项目值和项目标签。


    更新您似乎对问题的措辞有误,而实际上想要两者兼而有之。在这种情况下,您只需自己持有 ID-标签值对的Map,然后通过所选 ID 从地图中获取标签。

    private Map<Long, String> themaIdsAndLabels = new HashMap<Long, String>();
    
    // ...
    
    public void submit() {
        String themaLabel = themaIdsAndLabels.get(thema);
        // ...
    }
    

    您可以重用此Map 来生成SelectItems 或更多列表,如果您使用的是JSF 2.0 和EL 2.2,您也可以直接在&lt;f:selectItems&gt; 中使用该映射,而无需将其复制到List&lt;SelectItem&gt;.

    <f:selectItems value="#{bean.themaIdsAndLabels.entrySet()}" var="entry" itemValue="#{entry.key}" itemLabel="#{entry.value}" />
    

    或者,如果您的唯一目的是在输出文本中重新显示标签,您也可以只使用

    <h:outputText value="#{bean.themaIdsAndLabels[bean.thema]}" />
    

    【讨论】:

    • 好的,但是有什么方法可以同时获取 id 和 label 吗?例如.. ?
    • 你说你不想拿到身份证?无论如何,我更新了答案。
    • 您能否提供一些代码示例,因为我不太清楚。谢谢
    • BalusC,我试过你的代码,但是 selectOneMenu 一直是空的,有什么想法吗?
    • 或许你需要先填图?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多