ManagedBean[RESOLVIDO]

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("279.524.258-35");
		
		BancoDeClientes bd = new BancoDeClientes();
		bd.salvar(cli);
		
	}*/

}

Alguem pode me ajudar por favor?

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

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

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?

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;  
    }  

Não não… só o do próprio cliente… assim:[code]@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;
}

}[/code]

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

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?

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: bean.ClienteBean@c12978.salvar()
javax.faces.FacesException: #{BeanCliente.salvar}: javax.el.MethodNotFoundException: /index.xhtml @21,78 action="#{BeanCliente.salvar}": Method not found: bean.ClienteBean@c12978.salvar()
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";
		
	}

}

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.

Deu certo…

Obrigado a todos e desculpem o transtorno

[quote=evandro_araujo]Deu certo…

Obrigado a todos e desculpem o transtorno [/quote]
Não é transtorno nenhum, se tiver mais dúvidas pode postar aqui :slight_smile: