我正在尝试设置一个由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,当我尝试提交表单时出现此错误:
答案 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
,因此您需要转换它。
更多信息: