如果你在JSF 1.x中,您需要提供一个SelectItem[]
,List<SelectItem>
或Map<String, Object>
到f:selectItems
的value
。最常见的选择是List<SelectItem>
。假设你想使用Model#getIdManfacturer()
(我假设是一个Long
)既项标签和值,这里有一个例子:
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()));
}
}
// ...
}
结合
<h:selectOneMenu value="#{bean.selectedManfacturerId}">
<f:selectItems value="#{bean.selectManfacturerIds}" />
</h:selectOneMenu>
然而,如果您已经使用JSF 2.0,那么您也可以使用List<SomeBean>
。 JSF 2.0 <f:selectItems>
中新的var
属性允许您在视图中声明迭代项目。开球例如:
public class Bean {
private Long selectedManfacturerId; // +getter +setter
private List<Manfacturer> manfacturers; // +getter
@PostConstruct
public void init() {
manfacturers = getItFromDatabaseSomehow();
}
// ...
}
结合
<h:selectOneMenu value="#{bean.selectedManfacturerId}">
<f:selectItems value="#{bean.manfacturers}" var="manfacturer" itemValue="#{manfacturer.manfacturerId}" />
</h:selectOneMenu>