java.lang.String不能使用s转换为javax.faces.model.SelectItem:selectItems

时间:2015-11-18 08:38:49

标签: jsf jsf-1.2

<h:selectOneMenu id="reportType" style="width:175px" value="#{pageDemoSearchBean.status}">
    <f:selectItems value="#{pageDemoSearchBean.vehicleStatus}" />
</h:selectOneMenu>

我正在使用JSF 1.2

这行代码抛出classCastException

  

java.lang.String无法强制转换为javax.faces.model.SelectItem

如果在f:selectItems标签中用“itemValue”替换“value”,则会给出另一个异常,告诉

  根据TLD

itemValue对于selectItems不正确

1 个答案:

答案 0 :(得分:1)

在JSF 1.x中,无法提供List<T>作为<f:selectItems value>。它只支持List<javax.faces.model.SelectItem>

以下是正确使用的启动示例,从我们的 tag wiki page(使用JSF 2.x编写的内容)进行复制,因此请考虑一些示例不适用于侏罗纪JSF 1.x):

<h:form>
    <h:selectOneMenu value="#{bean.selectedItem}">
        <f:selectItem itemValue="#{null}" itemLabel="-- select one --" />
        <f:selectItems value="#{bean.availableItems}" />
    </h:selectOneMenu>
    <h:commandButton value="Submit" action="#{bean.submit}" />
</h:form>
private String selectedItem; // +getter +setter
private List<SelectItem> availableItems; // +getter (no setter necessary)

@PostConstruct
public void init() {
    availableItems = new ArrayList<SelectItem>();
    availableItems.add(new SelectItem("foo", "Foo label"));
    availableItems.add(new SelectItem("bar", "Bar label"));
    availableItems.add(new SelectItem("baz", "Baz label"));
}