【问题标题】:java.lang.String cannot be cast to javax.faces.model.SelectItem with s:selectItemsjava.lang.String 无法使用 s:selectItems 强制转换为 javax.faces.model.SelectItem
【发布时间】:2015-11-18 08:38:48
【问题描述】:
<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 标记中将“value”替换为“itemValue”会给出另一个异常

根据 TLD,对于 selectItems,itemValue 不正确

【问题讨论】:

  • 使用 JSF 1.x 时,查找 JSF 1.x 答案/示例/资源,而不是 JSF 2.x 答案/示例/资源。
  • 请告诉我们您在jsp页面中导入lib的代码
  • 请忽略以上司墨的胡言乱语。这里没有 JSP 导入的方法。
  • 你的方法 pageDemoSearchBean.vehicleStatus 应该返回 List&lt;SelectItem&gt; 而不是 List&lt;String&gt;

标签: jsf jsf-1.2


【解决方案1】:

在 JSF 1.x 中,不能将 List&lt;T&gt; 提供为 &lt;f:selectItems value&gt;。仅支持List&lt;javax.faces.model.SelectItem&gt;

这是一个正确使用的启动示例,从我们的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"));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多