如何选择javax.faces.model.SelectItem

时间:2009-03-06 15:23:33

标签: java jsf

我正在创建javax.faces.model.SelectItem(在bean中)的列表,以便与h:selectManyCheckbox一起使用,但我无法弄清楚如何选择SelectItem

怎么做?一定是可能的,对吗?...

    public List<SelectItem> getPlayerList(String teamName) {
    List<SelectItem> list = new ArrayList<SelectItem>();

    TeamPage team = (TeamPage) pm.findByName(teamName);

    List<PlayerPage> players = pm.findAllPlayerPages();

    for (PlayerPage player : players) {
        boolean isMember = false;
        if (team.getPlayerPages().contains(player)) {
            isMember = true;
        }
        SelectItem item;
        if (isMember) {
            // TODO: Make SelectItem selected???
            item = null;
        } else {
            item = new SelectItem(player.getId(), createListItemLabel(player), "", false, false);
        }
        list.add(item);         
    }
    return list;
}

2 个答案:

答案 0 :(得分:9)

假设我们有这个JSF代码:

<h:selectManyCheckbox value="#{bean.selectedValues}">
    <f:selectItems value="#{bean.playerList}"/>
</h:selectManyCheckbox>

然后所选的值(即选中的复选框)存储在 bean.selectedValues 属性中。

因此,在Java代码中,您必须通过在 selectedValues 属性中放入正确的ID来处理selectValues。

答案 1 :(得分:-1)

如果有人正在使用selectOneMenu并动态填充元素: 创建SelectItem时,如果您提供一些值(第一个参数),如下所示:

new SelectItem("somevalue", "someLabel", "someDescription", false, false);

它在html中翻译为:

<option value="somevalue">someLabel</option>

如果您没有提供以下值:

new SelectItem("", "someLabel", "someDescription", false, false);

,它翻译成这个

<option value="" selected="selected">someLabel</option>

因此,如果您希望元素成为页面加载时的默认值(例如“选择其中一个”),则不要提供值。如果您创建多个不带值的元素,则页面加载时将默认选择其中的任何一个(可能是基于字母升序的首选项)。