Mostrar resultados através de um selectOneMenu

2 respostas
E

Bem, pesquisei antes nos tópicos existentes e nào consegui resolver o problema, por isso criei um novo tópico.

Estou fazendo uma consulta de estados e cidades do sistema. ao selecionar o estado, o sistema deverá informar as cidades cadastradas referentes aquele estado.

<h:outputLabel for="estado" value="#{msgs['cadastro.estado.titulo']}:" styleClass="labels"/>
    <h:selectOneMenu id="estado" value="#{estadoBean.estado.id}" rendered="true">
        <f:selectItems value="#{estadoBean.listaEstados}"  />
        <a4j:support event="onchange" action="#{estadoBean.actionCarregarCidades}" reRender="estado,cidades" ></a4j:support>
</h:selectOneMenu>

<h:selectOneMenu id="cidades" value="1" rendered="true">
        <f:selectItems value="#{estadoBean.cidadesByEstado}"  />
</h:selectOneMenu>

Negócio eh que ele já vai direto trazendo as cidades do estado já quando a pagina é carregada, sem dar a chance de uma primeira escolha do estado. Em EstadoBean tenho um objeto do tipo Estado: Estado estado = new Estado();

No método getCidadesByEstado() porém, ele não consegue pegar o id do estado selecionado, causando o seguinte erro:

javax.faces.FacesException: javax.el.ELException: /protegido/consultas/cidade.jspx @24,64 value="#{estadoBean.cidadesByEstado}": Error reading 'cidadesByEstado' on type br.com.sgc.beans.EstadoBean
    at javax.faces.component.UISelectItems.getValue(UISelectItems.java:144)
    at com.sun.faces.renderkit.RenderKitUtils.getSelectItems(RenderKitUtils.java:289)
    at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:814)
    at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:280)
    at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:861)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:937)
    at javax.faces.render.Renderer.encodeChildren(Renderer.java:148)
    at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
    at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933)
    at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
    at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
    at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:196)
    at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
    at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
    at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:177)
    at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:267)
    at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:380)
    at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:507)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Unknown Source)
Caused by: javax.el.ELException: /protegido/consultas/cidade.jspx @24,64 value="#{estadoBean.cidadesByEstado}": Error reading 'cidadesByEstado' on type br.com.sgc.beans.EstadoBean
    at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:76)
    at javax.faces.component.UISelectItems.getValue(UISelectItems.java:141)
    ... 38 more
Caused by: java.lang.[b]NullPointerException[/b]
    at br.com.sgc.beans.EstadoBean.getCidadesByEstado(EstadoBean.java:54)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:62)
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:53)
    at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:118)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186)
    at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71)
    ... 39 more

ele dá esse erro pois no objeto estado em EstadoBean tem id nulo. Porém eu faço:

<h:selectOneMenu id="estado" value="#{estadoBean.estado.id}" rendered="true">
        <f:selectItems value="#{estadoBean.listaEstados}"  />

ou seja, não era pra estar null. sugestões?

2 Respostas

E

bem, consegui resolver o problema em parte. consegui que ao selecionar o estado a outra combo mostre as cidades daquele estado, porém ao selecionar a cidade a combo de bairro não mostra os bairros cadastrados daquela cidade. segue o codigo da pagina:

<h:outputLabel for="estado" value="#{msgs['estado.nome']}:" styleClass="labels"/>
					<h:selectOneMenu id="estado" value="#{estadoBean.estado.objectID}" immediate="true" rendered="true" required="false">
						<f:selectItem itemLabel="Selecione" itemValue="0"/>  
						<f:selectItems value="#{estadoBean.listaEstados}"/>  
						<a4j:support event="onchange" ajaxSingle="true"	action="#{estadoBean.getCidadesByEstado}" reRender="estado,cidade,bairro"/>  
					</h:selectOneMenu>  	
					<br/><br/>
					
					&lt;h:outputLabel for="cidade" value="#{msgs['cidade.nome']}:" styleClass="labels"/&gt;
					&lt;h:selectOneMenu id="cidade" value="#{cidadeBean.cidade.objectID}" immediate="true" rendered="true" required="false"&gt;
						&lt;f:selectItem itemLabel="Selecione" itemValue="0"/&gt;  
						&lt;f:selectItems value="#{estadoBean.itensCidade}"	/&gt; 
						&lt;a4j:support event="onchange" ajaxSingle="true"	action="#{cidadeBean.getBairrosByCidades}" reRender="estado,cidade,bairro"/&gt;  						
					&lt;/h:selectOneMenu&gt;					
 					<br/><br/>
 					
					&lt;h:outputLabel for="bairro" value="#{msgs['bairro.nome']}:" styleClass="labels"/&gt;
 					&lt;h:selectOneMenu id="bairro" value="#{bairroBean.bairro.objectID}" immediate="true" rendered="true" required="false"&gt;
						&lt;f:selectItem itemLabel="Selecione" itemValue="0"/&gt;  
						&lt;f:selectItems value="#{cidadeBean.itensBairro}"	/&gt;  
					&lt;/h:selectOneMenu&gt;

ao selecionar a cidade recebo um warning:

WARNING: java.util.NoSuchElementException
javax.faces.FacesException: java.util.NoSuchElementException
	at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:714)
	at javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:675)
	at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:720)
	at javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:675)
	at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:720)
	at javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:675)
	at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:242)
	at org.ajax4jsf.component.AjaxViewRoot.processDecodes(AjaxViewRoot.java:409)
	at com.sun.faces.lifecycle.ApplyRequestValuesPhase.execute(ApplyRequestValuesPhase.java:78)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:177)
	at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:267)
	at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:380)
	at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:507)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.util.NoSuchElementException
	at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:130)
	at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:157)
	at javax.faces.component.SelectItemsIterator.next(SelectItemsIterator.java:61)
	at javax.faces.component.SelectUtils.matchValue(SelectUtils.java:82)
	at javax.faces.component.UISelectOne.validateValue(UISelectOne.java:144)
	at javax.faces.component.UIInput.validate(UIInput.java:875)
	at javax.faces.component.UIInput.executeValidate(UIInput.java:1072)
	at javax.faces.component.UIInput.processDecodes(UIInput.java:642)
	at org.ajax4jsf.component.AjaxViewRoot$1.invokeContextCallback(AjaxViewRoot.java:392)
	at org.ajax4jsf.component.ContextCallbackWrapper.invokeContextCallback(ContextCallbackWrapper.java:24)
	at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:711)
	... 33 more

bem, éh como se não tivesse cidades pra selecionar…de fato, ao ver no codigo fonte em html da página, com o estado e a cidade selecionadas, não aparece as opções de cidade como aparece em estado:

alguma sugestão?

rafaelvalerini

Cara… naum sei se isso já foi resolvido, mas caso ainda não tenha, consegui solucionar este seu problema da seguinte forma:

Alterar o seu componente:

<h:selectOneMenu id="cidades" value="1" rendered="true">   
        <f:selectItems value="#{estadoBean.cidadesByEstado}"  />   
</h:selectOneMenu>

para:

<h:selectOneMenu id="cidades" value="1" rendered="true">   
        <f:selectItem itemLabel="---Selecione--" itemValue="0"/>
        <f:selectItems value="#{estadoBean.cidadesByEstado}"  />   
</h:selectOneMenu>

isso fará com que esse erro pare de acontecer.
Flw

Criado 27 de dezembro de 2008
Ultima resposta 17 de fev. de 2009
Respostas 2
Participantes 2