0

我正在尝试设置一个 selectOneMenu 列表,该列表由标签中的类别名称和值中的类别 ID 填充,我这样做是这样的:

<h:selectOneMenu id="categorie" value="#{adminRealisationController.categorie }">
            <c:forEach items="#{listeCats}" var="cat">
                <f:selectItem itemLabel="#{cat.nom }" itemValue="#{cat.id }"/>
            </c:forEach>
            </h:selectOneMenu>

这个 listeCats 设置了一个 jsf bean,这就是我从 db 中提取列表的方法

BeanFactory beanFactory = new XmlBeanFactory(new ClassPathResource("applicationContext.xml")); 
        CategoriesPL C = (CategoriesPL) beanFactory.getBean("categoriesPL");


        setListeCats(C.findAll());
        titre="";slug="";categorie.setId(2);description="";

        FacesContext.getCurrentInstance().getExternalContext().getRequestMap().put("listeCats", getListeCats());

        return "nouveauView";

该属性在 faces xml 中设置为 Integer,当我尝试提交表单时出现此错误:

4

1 回答 1

3

这就是f:selectItems存在的原因,你应该替换它

 <c:forEach items="#{listeCats}" var="cat">
     <f:selectItem itemLabel="#{cat.nom }" itemValue="#{cat.id }"/>
 </c:forEach>

通过这个(使用 JSF 2.0 时)

<f:selectItems value="#{listeCats}" var="cat" itemLabel="#{cat.nom}" itemValue="#{cat.id}" />

或者通过这个(使用 JSF 1.X 时)

<f:selectItems value="#{listeCats}" />

稍后,您还需要返回一个List<SelectItem>

public List<SelectItem> getListeCats()
{
    List<SelectItem> items = new ArrayList();

    items.add(new SelectItem("value","label"));

    return items;
}

注意:这只是一个例子,它根本没有效率。唯一要记住的是,您需要将Object列表转换为SelectItem. 此外,value="#{adminRealisationController.categorie}"将收到 aString而不是 your Object,因此您需要对其进行转换。

更多信息 :

于 2013-06-22T10:45:29.110 回答