selectOneMenu HTTP状态500 - 不知道如何迭代提供的“项目”

时间:2013-06-22 10:14:58

标签: jsf selectonemenu

我正在尝试设置一个由Label&amp ;;中的分类名称填充的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,当我尝试提交表单时出现此错误:

1 个答案:

答案 0 :(得分: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}"将收到String而不是Object,因此您需要转换它。

更多信息: