Si vous êtes sur 1.x JSF, vous devez fournir un SelectItem[]
, List<SelectItem>
ou Map<String, Object>
au value
de f:selectItems
. Le choix le plus commun est un List<SelectItem>
. En supposant que vous voulez utiliser Model#getIdManfacturer()
(que je suppose être un Long
) à la fois comme étiquette de l'élément et valeur, voici un exemple:
public class Bean {
private Long selectedManfacturerId; // +getter +setter
private List<SelectItem> selectManfacturerIds; // +getter
@PostConstruct
public void init() {
selectManfacturerIds = new ArrayList<SelectItem>();
List<Manfacturer> manfacturers = getItFromDatabaseSomehow();
for (Manfacturer manfacturer : manfacturers) {
selectManfacturerIds.add(new SelectItem(manfacturer.getManfacturerId()));
}
}
// ...
}
en combinaison avec
<h:selectOneMenu value="#{bean.selectedManfacturerId}">
<f:selectItems value="#{bean.selectManfacturerIds}" />
</h:selectOneMenu>
Cependant , si vous êtes déjà sur JSF 2.0, vous pouvez également utiliser un List<SomeBean>
pour cela. Le nouvel attribut var
dans un JSF 2.0 <f:selectItems>
vous permet de déclarer l'élément itéré dans la vue. par exemple le coup d'envoi:
public class Bean {
private Long selectedManfacturerId; // +getter +setter
private List<Manfacturer> manfacturers; // +getter
@PostConstruct
public void init() {
manfacturers = getItFromDatabaseSomehow();
}
// ...
}
en combinaison avec
<h:selectOneMenu value="#{bean.selectedManfacturerId}">
<f:selectItems value="#{bean.manfacturers}" var="manfacturer" itemValue="#{manfacturer.manfacturerId}" />
</h:selectOneMenu>