[RESOLVIDO]Problema Managed Bean

3 respostas
S

Boa noite a todos,

Estou tentando listar um resultado retornado pelo banco de dados num SelectOneMenu (JSF) só que sempre que vou abrir a pagina JSP ele da um erro como se não estivese encontrando o método que eu estou chamando. Segue abaixo o erro junto com as classes utilizadas.

Erro:

GRAVE: Servlet.service() for servlet [Faces Servlet] in context with path [/BI2_Project] threw exception [/inserir.jsp(51,14) '#{cidade.listarCidades}' Property 'listarCidades' not found on type Basicas.Cidade] with root cause
org.apache.jasper.el.JspPropertyNotFoundException: /inserir.jsp(51,14) '#{cidade.listarCidades}' Property 'listarCidades' not found on type Basicas.Cidade
	at org.apache.jasper.el.JspValueExpression.getValue(JspValueExpression.java:109)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)
	at javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)
	at javax.faces.component.UISelectItems.getValue(UISelectItems.java:129)
	at com.sun.faces.renderkit.SelectItemsIterator.initializeItems(SelectItemsIterator.java:202)
	at com.sun.faces.renderkit.SelectItemsIterator.hasNext(SelectItemsIterator.java:135)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.renderOptions(MenuRenderer.java:762)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.renderSelect(MenuRenderer.java:844)
	at com.sun.faces.renderkit.html_basic.MenuRenderer.encodeEnd(MenuRenderer.java:298)
	at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1763)
	at javax.faces.render.Renderer.encodeChildren(Renderer.java:168)
	at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:845)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1756)
	at javax.faces.component.UIComponent.encodeAll(UIComponent.java:1759)
	at com.sun.faces.application.view.JspViewHandlingStrategy.doRenderView(JspViewHandlingStrategy.java:432)
	at com.sun.faces.application.view.JspViewHandlingStrategy.renderView(JspViewHandlingStrategy.java:233)
	at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:131)
	at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:121)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:594)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:851)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:278)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:300)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Faces:

<?xml version="1.0" encoding="UTF-8"?>

<faces-config
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
    version="2.0">
    
    <navigation-rule>
    	<from-view-id>/inserir.jsp</from-view-id>
    	<navigation-case>
    		<from-outcome>sucess</from-outcome>
    		<to-view-id>/sucesso_insercao.jsp</to-view-id>
    	</navigation-case>
    	<navigation-case>
    		<from-outcome>failure</from-outcome>
    		<to-view-id>/falha_insercao.jsp</to-view-id>
    	</navigation-case>
    </navigation-rule>
      
    <managed-bean>
    	<managed-bean-name>cidade</managed-bean-name>
    	<managed-bean-class>Basicas.Cidade</managed-bean-class>
    	<managed-bean-scope>request</managed-bean-scope>
    </managed-bean>
       
</faces-config>

Classe Cidade:

package Basicas;

import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;

import Repositorio.RepCidade;

public class Cidade {
	
	private int id;
	private String descricao;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	                        
	public List<SelectItem> listarCidades() {
		Cidade cidade = new Cidade();
		cidade.setId(0);
		cidade.setDescricao("");
		RepCidade rc = new RepCidade();
		List<Cidade> lista = new ArrayList<Cidade>(rc.buscar(cidade)); 	
		List<SelectItem> listaCombo = new ArrayList<SelectItem>();
		
		for (Cidade c : lista) {
			SelectItem si = new SelectItem();
			si.setValue(c.getId());
			si.setLabel(c.getDescricao());
			listaCombo.add(si);
		}		
		return listaCombo;
	}
	
	//Construtores
	public Cidade() {}
	public Cidade(int id, String descricao) {
		setId(id);
		setDescricao(descricao);
	}		
}

Trecho JSP:

<td>Cidade:</td>
 <td>
   <h:selectOneMenu>                  
      <f:selectItems value="#{cidade.listarCidades}"/>  
    </h:selectOneMenu>
 </td>

Estou utilizando o JSF, já tentei declarar o managed bean tanto pela anotations quanto pelo FacesConfig e nada de solucionar esse problema. Se alguem tiver como me ajudar ficaria muito agradecido.

Obrigado

3 Respostas

H

altera de listarCidades para getListarCidades.

S

Puts cara, muito obrigado.
Agora você sabe me dizer porque ele só reconhece se eu colocar o get na frente ? Isso sempre foi assim ou começou apartir dessa versão 2.0 ?

Obrigado novamente.

H

strikezado:
Puts cara, muito obrigado.
Agora você sabe me dizer porque ele só reconhece se eu colocar o get na frente ? Isso sempre foi assim ou começou apartir dessa versão 2.0 ?

Obrigado novamente.

Se não me engano, ele sempre foi assim.

O padrão JavaBeans diz que você deve colocar get quando quer buscar alguma informação e set para alterar.

E os métodos indicam ações por isso que um método para alterar um cliente não precisa de get/set na frente do nome.

Criado 23 de novembro de 2011
Ultima resposta 24 de nov. de 2011
Respostas 3
Participantes 2