4

我从编译器收到的奇怪错误:

Expected a child component type of UISelectItem/UISelectItems for component type javax.faces.SelectOne(siachoice).  Found javax.faces.component.UISelectItems.

那么,如果他期待 UISelectItems,并找到了 UISelectItems,那么错误在哪里?

我的 JSP 实现:

<h:selectOneMenu id="siachoice" value="#{dbSelectBean.currentOption}">
                                <f:selectItems value="#{dbSelectBean.dbs}" />
                            </h:selectOneMenu>

方法,我将 UISelectItem 设置为 UISelectItems:

private UISelectItems populateDatabases(String databaseString) {
    UISelectItems selects = new UISelectItems();
    List<UISelectItem> result = new ArrayList<UISelectItem>();
    StringTokenizer tokeniz = new StringTokenizer(databaseString, GlobalConstants.DELIMITER);
    while(tokeniz.hasMoreTokens()){
        String tempDB = tokeniz.nextToken();
        UISelectItem item = new UISelectItem();
        item.setItemValue(tempDB);
        item.setItemLabel(tempDB);
        result.add(item);
    }
    selects.setValue(result);

    return selects;
}

然后,当然,我将它设置为 bean 变量 dbs。

帮助?

4

4 回答 4

4

你必须返回Collection一个javax.faces.model.SelectItem

列表列表 = 新的 ArrayList();
list.add(new SelectItem(value, label));

返回列表;

于 2009-11-13T09:33:46.500 回答
4

期望以下<f:selectItems value="#{bean.items}" />值之一:

public SelectItem[] getItems() {}

public List<SelectItem> getItems() {}

public Map<String, Object> getItems() {}

常用的确实是List<SelectItem>.

编辑:作为对评论的回应:UISelectItem代表<f:selectItem>组件。这同样适用于UISelectItems<f:selectItems>。例如

<f:selectItem binding="#{bean.selectItem}" />
<f:selectItems binding="#{bean.selectItems}" />

绑定为

private UISelectItem selectItem;
private UISelectItems selectItems;
// +getter +setter

这样您就可以像其他所有组件一样以编程方式控制组件UIComponent

于 2009-11-13T11:34:41.640 回答
1
<h:form>
<h:selectOneListbox size="5"  >

<f:selectItems  value="#{userManager.Test()}" />
</h:selectOneListbox>
</h:form>

import javax.faces.model.SelectItem;
import tn.com.ttnproject.entity.*;

@Name("userManager")
@Scope(ScopeType.CONVERSATION)
public class UserManager {
    public  List <SelectItem> listAllUsersNames;
    SelectItem element;
    public List<SelectItem> Test(){ 
        listAllUsersNames = new ArrayList<SelectItem>();
        for (int i=1;i<=10;i++)
        {
            element=new SelectItem(
                new Integer(i),
                i+".00 euros",
                "Produit à "+i+".00 euros");
            listAllUsersNames.add(element);
        }
        return listAllUsersNames;
    }
}
于 2011-06-02T08:18:38.760 回答
0

问题是 UISelectItem 是一个组件类,因此它必须按binding属性与 jsf 标签配对。如果您想拥有值,则必须使用SelectItem(s)类。

于 2009-11-13T09:32:36.007 回答