JSF的SelectItem例外

问题描述:

我想给SelectItems的列表到selectOneMenu和我得到这个异常:JSF的SelectItem例外

[Ljavax.faces.model.SelectItem; cannot be cast to javax.faces.model.SelectItem 

这看起来有点怪我。这是在页面的代码:

<h:selectOneMenu value="#{user.name}"> 
       <f:selectItem value="#{user.names}" /> 
</h:selectOneMenu> 

,并在用户等级:

import javax.faces.model.SelectItem; 
private final SelectItem[] users = {new SelectItem("Jack"),new SelectItem("Max")}; 
+1

如果你使用''而不是?在我看来'user.names'包含一个名称列表。 – Lion 2012-02-29 03:37:20

+1

异常消息并不奇怪。 '[L'部分意味着它是一个对象数组。您不能将'SelectItem []'强制转换为'SelectItem'。 – BalusC 2012-02-29 10:49:09

+0

谢谢你。我是JSF的新手,所以我没有认识到这一点。 – Giannis 2012-03-01 11:36:58

<f:selectItem>代表一个SelectItem,但你的EL表达式喂它的SelectItems数组。你的意思是<f:selectItems>

此外,由于JSF 2.x的f:selectItems是完全能够与普通的Java bean时,作为official docs秀:

<h:selectOneListbox size="1" id="escape02" value="#{select05NoSelection.initialCollectionValues}"> 
    <f:selectItems value="#{select05NoSelection.hobbitList}" 
       var="n" 
       itemValue="#{n}" 
       itemLabel="#{n.bio}" 
       itemDescription="#{n.description}" 
       itemDisabled="#{n.disabled}" 
       itemLabelEscaped="true" 
       noSelectionValue="#{select05NoSelection.hobbitList[0]}"/> 
</h:selectOneListbox> 

因此不再需要创建辅助Bean一个SelectItems。