Olá, estou iniciando em JSF e tenho o seguinte Erro ao tentar popular um selectOneMenu:
java.lang.IllegalArgumentException: Expected a child component type of UISelectItem/UISelectItems for component type javax.faces.SelectOne(re). Found null.
<p><h:outputLabelvalue="Recurso:"for="recurso"/><h:selectOneMenu><f:selectItemitemLabel="--Selecione um --"/><f:selectItemsvalue="#{RecursoBean.recursos}"/></h:selectOneMenu></p></fieldset></h:form>
Agradeço desde já caso alguém me indique a solução.
<h:selectOneMenuvalue="#{RecursoBean.recurso}"><s:selectItemsvalue="#{RecursoBean.recursos}"var="recurso"label="#{recurso.txLabel}"noSelectionLabel="--Selecione um --"/><s:convertEntity/></h:selectOneMenu>
Onde o “value” do selectOneMenu é a variavel do tipo SelectItem q vai guardar o valor selecionado;
O “value” do selectItems é a sua lista, “var” é um alias e “label” é o rotulo a ser exibido…
<p><h:outputLabelvalue="Recurso:"for="recurso"/><h:selectOneMenuvalue="#{Recurso.recurso}"><f:selectItemitemLabel="--Selecione um --"/><f:selectItemsvalue="#{RecursoBean.recursos}"/></h:selectOneMenu></p></fieldset></h:form></body>
</f:view>
Obrigado
K
kadu.neves
Desculpe Paulo, usei as tags e , não funcionou… seria entre colchetes mesmo???
obrigado
P
paulofernandesjr
isso mesmo é colchetes
você fez o teste que eu disse?
abraço
K
kadu.neves
Olá paulo, fiz o teste sim. Obtive o erro:
Expected a child component type of UISelectItem/UISelectItems for component type javax.faces.SelectOne(j_id_jsp_81747433_4). Found null.
<h:formid="Form"><fieldset><div><h:messagesglobalOnly="true"errorClass="errorMessage"infoClass="successMessage"/></div><divclass="titulo">Recursos</div><p><h:outputLabelvalue="Recurso:"for="recurso"/><h:selectOneMenuvalue="#{Recurso.recurso}"><f:selectItemitemLabel="--Selecione um --"/><f:selectItemsvalue="#{RecursoBean.recursos}"/></h:selectOneMenu></p></fieldset></h:form>
abraço
P
paulofernandesjr
Ok
seu problema está no converter então
você sabe criar um converter?
se não souber eu te explico passo a passo com um exemplo
publicclassConverterParceiroimplementsConverter{privateGenericDAO<Parceiro>dao=newDAOFactory().getParceiroDAO();publicObjectgetAsObject(FacesContextcontext,UIComponentcomponent,Stringvalue){Map<String,Object>parametros=newHashMap<String,Object>();parametros.put("nomeFantasia",value.toString());returndao.ObjetoPorCriterio("from Parceiro p where p.nomeFantasia = :nomeFantasia",parametros);}publicStringgetAsString(FacesContextcontext,UIComponentcomponent,Objectobject){return((Parceiro)object).getNomeFantasia();}}// dao.ObjetoPorCriteiro retorna um unico objeto passando uma query e os parametros..eufizassim:D
P
paulofernandesjr
você mexeu no toString da classe Parceiro?
porque no meu caso o value vinha o ID da classe e não o nome