ManagedBean[RESOLVIDO]

11 respostas
E

Pessoal estou comencando estudar o ManagedBean e logo no primeiro exemplo esta dando o erro abaixo:

javax.servlet.ServletException: /index.xhtml @20,63 value="#{BeanCliente.cliente.nome}": Property ‘cliente’ not found on type bean.ClienteBean
javax.faces.webapp.FacesServlet.service(FacesServlet.java:422)

root cause

javax.el.PropertyNotFoundException: /index.xhtml @20,63 value="#{BeanCliente.cliente.nome}": Property cliente not found on type bean.ClienteBean

com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:111)

javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:194)

javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:182)

javax.faces.component.UIOutput.getValue(UIOutput.java:169)

org.primefaces.util.ComponentUtils.getStringValueToRender(ComponentUtils.java:61)

org.primefaces.component.inputtext.InputTextRenderer.encodeMarkup(InputTextRenderer.java:86)

org.primefaces.component.inputtext.InputTextRenderer.encodeEnd(InputTextRenderer.java:53)

javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:875)

com.sun.faces.renderkit.html_basic.HtmlBasicRenderer.encodeRecursive(HtmlBasicRenderer.java:312)

com.sun.faces.renderkit.html_basic.GridRenderer.renderRow(GridRenderer.java:185)

index.html

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
	xmlns:h="http://java.sun.com/jsf/html"
	xmlns:f="http://java.sun.com/jsf/core"
	xmlns:p="http://primefaces.prime.com.tr/ui">
<h:head>
	<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
	<title>eTest</title>
</h:head>
<h:body>




	<h:form>
		<h1 align="center">HOME PAGE</h1>
		<h:panelGrid columns="2">
		<h:outputLabel value="Nome"/>
		<p:inputText id="nome" value="#{BeanCliente.cliente.nome}"/>		
		<p:commandButton id="Salvar" value="Salvar" action="#{BeanCliente.salvar}">
		</p:commandButton>
		
		
		
		</h:panelGrid>


	</h:form>
</h:body>
</html>

----bean

package bean;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import banco.BancoDeClientes;
import modelo.Cliente;
@ManagedBean(name = "BeanCliente")
@SessionScoped
public class ClienteBean {
	BancoDeClientes bdc = new BancoDeClientes();
	Cliente cliente = new Cliente();
	
	
	public String Salvar(){
		System.out.println("teste");
		return "sucesso";
		
	}

}


classe cliente

package modelo;

import java.util.Date;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

import banco.BancoDeClientes;


@Entity
@Table (name="TB_CLIENTE")


public class Cliente {
	@Id
	private String CPF;
	private String nome;
	private String descricao;
	private String telefone;
	private String observacao;
	private String senha;
	public String getCPF() {
		return CPF;
	}
	public void setCPF(String cPF) {
		CPF = cPF;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public String getTelefone() {
		return telefone;
	}
	public void setTelefone(String telefone) {
		this.telefone = telefone;
	}
	public String getObservacao() {
		return observacao;
	}
	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}
	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}
	
	
	/*public static void main(String[] args) {
		Cliente cli = new Cliente();
		cli.setCPF("[CPF removido]");
		
		BancoDeClientes bd = new BancoDeClientes();
		bd.salvar(cli);
		
	}*/

}

Alguem pode me ajudar por favor?

11 Respostas

Rodrigo_Sasaki

a EL acessa os atributos via métodos getter/setter. Você precisa criá-los.

E

entao mas nao deveria acessar pois criei na classe cliente os getter e setter e instancei a classe…estsa errado isso ?

Rodrigo_Sasaki

Não, não está errado, mas não é aí que está o erro.

No seu ClienteBean você precisa ter getters e setters para o Cliente, entendeu?

E

Precisa colocar isso no meu Bean?

public String getCPF() {  
        return CPF;  
    }  
    public void setCPF(String cPF) {  
        CPF = cPF;  
    }  
    public String getNome() {  
        return nome;  
    }  
    public void setNome(String nome) {  
        this.nome = nome;  
    }  
    public String getDescricao() {  
        return descricao;  
    }  
    public void setDescricao(String descricao) {  
        this.descricao = descricao;  
    }  
    public String getTelefone() {  
        return telefone;  
    }  
    public void setTelefone(String telefone) {  
        this.telefone = telefone;  
    }  
    public String getObservacao() {  
        return observacao;  
    }  
    public void setObservacao(String observacao) {  
        this.observacao = observacao;  
    }  
    public String getSenha() {  
        return senha;  
    }  
    public void setSenha(String senha) {  
        this.senha = senha;  
    }
Rodrigo_Sasaki
Não não.. só o do próprio cliente.. assim:
@ManagedBean
public class ClienteBean{

    private Cliente cliente;

    // Você precisa adicionar esse getter
    public Cliente getCliente(){
        return cliente;
    }

    // Você precisa adicionar esse setter
    public void setCliente(Cliente cliente){
        this.cliente = cliente;
    }

}
E

Pessoal, desculpe a ignorância, e que estou iniciando os estudos com java agora. …
mas o que nao estou entendendo é que ja coloquei a linha de comando

Cliente cliente = new Cliente();

nao era para pegar os getters e setters , ja que os getters e setters estao na classe cliente

Rodrigo_Sasaki

suponha que você instancie o managed bean ClienteBean bean = new ClienteBean();como você faz para acessar o Cliente, através da variável de referência bean?

E
pessoal, fiz da seguinte forma :  e estas dando o seguinte erro :

AVISO: #{BeanCliente.salvar}: javax.el.MethodNotFoundException: /index.xhtml @21,78 action="#{BeanCliente.salvar}": Method not found: [email removido]()

javax.faces.FacesException: #{BeanCliente.salvar}: javax.el.MethodNotFoundException: /index.xhtml @21,78 action="#{BeanCliente.salvar}": Method not found: [email removido]()

at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:110)

at javax.faces.component.UICommand.broadcast(UICommand.java:315)

at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794)

at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259)

at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)

at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)

at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
package bean;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import banco.BancoDeClientes;
import modelo.Cliente;
@ManagedBean(name = "BeanCliente")
@SessionScoped
public class ClienteBean {
	BancoDeClientes bdc = new BancoDeClientes();
	Cliente cliente = new Cliente();
	
	
    public Cliente getCliente(){
        return cliente;
     }

     public void setCliente (Cliente cliente){
        this.cliente = cliente;
     }
     
	
	
	public String Salvar(){
		System.out.println("teste");
		return "sucesso";
		
	}

}
Rodrigo_Sasaki

Falta de atenção, cara.

O erro não é o mesmo.

Se você ler a stacktrace você vai ver que ele diz que não encontra um método salvar e esse método realmente não existe no seu ManagedBean, o método que você tem é Salvar com S maiúsculo, e a EL leva isso em consideração.

E

Deu certo…

Obrigado a todos e desculpem o transtorno

Rodrigo_Sasaki

evandro_araujo:
Deu certo…

Obrigado a todos e desculpem o transtorno


Não é transtorno nenhum, se tiver mais dúvidas pode postar aqui :slight_smile:

Criado 25 de setembro de 2012
Ultima resposta 25 de set. de 2012
Respostas 11
Participantes 2