使用托管bean填充组合框的selectItem(标签,值)

时间:2014-02-03 16:35:31

标签: xpages

我的页面中有一个组合,我希望在配置中填充一些关键字。我想使用托管bean来完成它。

假设我有一个名为Config的bean,其中有一个List categories字段。 ..

public class Configuration implements Serializable {
    private static final long serialVersionUID = 1L;
    private List<String> categories;

    public List<String> getCategories() {
        if (categories == null)
            categories = getCats();

        return categories;
    }

    //... etc.
}

当我将此字段用于我的组合时,它运作良好......

<xp:comboBox>
    <xp:selectItems>
        <xp:this.value><![CDATA[#{config.categories}]]></xp:this.value>
    </xp:selectItems>
</xp:comboBox>

但是,它只是一个标签列表。我也需要价值观。如何用两个字符串填充我的组合的selectItems - 标签和值?

编辑:

我尝试使用标签和值字段创建一个对象组合,并在我的comboBox中使用重复。

<xp:comboBox>
    <xp:repeat id="repeat1" value="#{config.combo}" var="c" rows="30">
        <xp:selectItem itemLabel="#{c.label}" itemValue="#{c.value}" />
    </xp:repeat>
</xp:comboBox>

仍然没有工作......: - (

2 个答案:

答案 0 :(得分:9)

而不是返回List<String>您的函数应返回List<javax.faces.model.SelectItem>。这是一个示例:

public static List<SelectItem> getComboboxOptions() {

    List<SelectItem> options = new ArrayList<SelectItem>();

    SelectItem option = new SelectItem();
    option.setLabel("Here's a label");
    option.setValue("Here's a value");

    options.add(option);

    return options;
}

使用此方法的优点(除了不必使用非概念性内容:-)之外,您还可以SelectItemGroup类对选项进行分组:

public static List<SelectItem> getGroupedComboboxOptions() {

    List<SelectItem> groupedOptions = new ArrayList<SelectItem>();

    SelectItemGroup group = new SelectItemGroup("A group of options");

    SelectItem[] options = new SelectItem[2];

    options[0] = new SelectItem("here's a value", "here's a label");
    options[1] = new SelectItem("here's a value", "here's a label");

    group.setSelectItems(options);

    groupedOptions.add(group);

    return groupedOptions;
}

答案 1 :(得分:3)

您可以使用SelectItems。 (见http://docs.oracle.com/javaee/6/api/javax/faces/model/SelectItem.html

您既可以指定值,也可以指定值。

import javax.faces.model.SelectItem;

public List<SelectItem> getCategories() {
    try {
        ArrayList<SelectItem> ret = new ArrayList<SelectItem>();
        ret.add(new SelectItem("my value", "my label"));
        return ret;
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
}