tenho uma tela de cadastro que em varios lugares to usando o h:selectOneMenu
mas depois que coloquei eles, fica dando erro
olha o erro
java.lang.IllegalArgumentException: Argument Error: An option for component codigoCfop was not an instance of javax.faces.model.SelectItem. Type found: java.util.ArrayList.
at com.sun.faces.renderkit.RenderKitUtils.getSelectItems(RenderKitUtils.java:336)
at com.sun.faces.renderkit.html_basic.MenuRenderer.getOptionNumber(MenuRenderer.java:675)
at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:793)
at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:335)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:833)
at com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:279)
A exception lançada é bem clara: argumento ilegal, uma opção para o componente codigoCfop (que é o id do seu segundo combo) não era uma instância de SelectItem, mas sim de ArrayList.
É o seguinte, pra popular um combo vc deve sempre usar uma List de SelectItem “List”, só isso.
E pra popular essa lista faça algo como:
List<SelectItem> itens = new ArrayList<SelectItem>();
for (Cfop cfop : listaCFOP) {
itens.add(new SelectItem(cfop, cfop.getDescricao())); //arg1=valor representado pelo item; arg2=o label que irá aparecer na lista de itens do combo na sua página
}
Aí no seu combo vc liga o value do “f:selectItems” dele a itens.
Acho que é isso, espero que quebre teu galho.
Abraço!
o tomahawk, a partir do 1.1.6 se não me engano, tem o selectItems que dá pra usar um Collection direto. Algo como:
<h:selectOneMenu id="codigoCfop" value="#{cadastroBean.cadastro.ide.CFOP}">
<t:selectItems value="#{cadastroBean.listaCFOP}" var="cfop" itemLabel="#{cfop.descricao}" itemValue="#{cfop}"/>
</h:selectOneMenu>
Talvez a implementação que você usa também tenha.
Seguinte, JSF não trabalha diretamente com objetos de entidades no h:selectOneMenu.
E sim com o tipo SelectItem.
Você tem 2 escolhas. Ou faz o cast para SelectItem no seu método ( A sua ArrayList retornada deve ser de )
, ou cria um Converter.
Tranquilo?
[/quote]
Como o amigo ozix falou, o tomahawk resolve o seu problema exatamente como ele descreveu, assim como a versão 2.0 do JSF, vc pode trabalhar diretamente com uma coleção de entidades da sua aplicação, da mesma forma do SelectItems do tomahawk.