Problema com JSF... (erro no .jsp)

Veja que o erro agora mudou. Ele se refere ao hibernate, parece que o mapeamento não está definido corretamente. Poste o código das classes para ajudar.

Classe Pessoa:

[code]package com.algaworks.dwjsf.financeiro.dominio;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
// diz que a classe é uma entidade
@Table(name = “pessoa”)
// especifica que a entidade representa uma tabela específica do banco de dados,
// descrita na propriedade name.
public class Pessoa {
private Long id;
private String nome;

/*
 * Id e GeneratedValue são usadas para declarar o identificador do banco de
 * dados, e esse identificador deve ter um valor gerado no momento de
 * inserção (auto-incremento)
 */
@Id
@GeneratedValue
public Long getId() {
	return id;
}

@Column(name = "nome")
public String getNome() {
	return nome;
}

@Override
public int hashCode() {
	final int prime = 31;
	int result = 1;
	result = prime * result + ((id == null) ? 0 : id.hashCode());
	return result;
}

@Override
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())
		return false;
	Pessoa other = (Pessoa) obj;
	if (id == null) {
		if (other.id != null)
			return false;
	} else if (!id.equals(other.id))
		return false;
	return true;
}

}[/code]

Classe Conta:

[code]package com.algaworks.dwjsf.financeiro.dominio;

import java.math.BigDecimal;
import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = “conta”)
public class Conta {
private Long id;
private Pessoa nome;
private String descricao;
private BigDecimal valor;
private TipoConta tipo;
private Date dataVencimento;
private Date dataBaixa;

@Id
@GeneratedValue
public Long getId() {
	return id;
}

@ManyToOne
// indica a multiplicidade do relacionamento entre contas e pessoas e a
// anotação
@JoinColumn(name = "pessoa_id")
// indica que essa relação é conseguida através da coluna especificada na
// propriedade name
public void setId(Long id) {
	this.id = id;
}

public Pessoa getNome() {
	return nome;
}

public void setNome(Pessoa nome) {
	this.nome = nome;
}

public String getDescricao() {
	return descricao;
}

public void setDescricao(String descricao) {
	this.descricao = descricao;
}

public BigDecimal getValor() {
	return valor;
}

public void setValor(BigDecimal valor) {
	this.valor = valor;
}

@Enumerated(EnumType.STRING)
// foi mapeado com a anotação @Enumerated com EnumType.STRING. Isso é
// necessário para que o Hibernate entenda que na coluna do banco de dados
// será gravado o nome da constante da enumeração, e não o número que
// representa cada opção.
public TipoConta getTipo() {
	return tipo;
}

public void setTipo(TipoConta tipo) {
	this.tipo = tipo;
}

@Column(name = "data_vencimento")
@Temporal(TemporalType.DATE)
public Date getDataVencimento() {
	return dataVencimento;
}

public void setDataVencimento(Date dataVencimento) {
	this.dataVencimento = dataVencimento;
}

/*
 * foram mapeados com:
 * 
 * @Column e @Temporal. A anotação @Temporal é útil para definir a precisão
 * de colunas de data/hora. No caso das duas datas que mapeamos, dizemos que
 * queremos armazenar apenas a data, e não data/hora.
 */
@Column(name = "data_baixa")
@Temporal(TemporalType.DATE)
public Date getDataBaixa() {
	return dataBaixa;
}

public void setDataBaixa(Date dataBaixa) {
	this.dataBaixa = dataBaixa;
}

@Override
public int hashCode() {
	final int prime = 31;
	int result = 1;
	result = prime * result + ((id == null) ? 0 : id.hashCode());
	return result;
}

@Override
public boolean equals(Object obj) {
	if (this == obj)
		return true;
	if (obj == null)
		return false;
	if (getClass() != obj.getClass())
		return false;
	Conta other = (Conta) obj;
	if (id == null) {
		if (other.id != null)
			return false;
	} else if (!id.equals(other.id))
		return false;
	return true;
}

}[/code]

Classe HibernateUtil:

[code]package com.algaworks.dwjsf.financeiro.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;

public class HibernateUtil {
private static SessionFactory sessionFactory;
static {
try {
sessionFactory = new AnnotationConfiguration().configure()
.buildSessionFactory();
} catch (Throwable ex) {
throw new ExceptionInInitializerError(ex);
}
}

public static Session getSession() {
	return sessionFactory.openSession();
}

}[/code]

Só as classes de domínio?? Ou também as outras??

Se eu postar o projeto no SkyDriver vcs podem da uma olhada??

ps: Eu sei que é pedir muito, mais não posso continuar a apostila sem saber pq está acorrendo esse problema, pois senão virá uma bola de neve…

[quote=xandi_m5]Se eu postar o projeto no SkyDriver vcs podem da uma olhada?? [/quote]Eu não.

[quote=xandi_m5]Ta aki:

<h:selectOneMenu id="pessoa" value="#{cadastroContaBean.contaEdicao.pessoa}" label="Pessoa" required="true"> <f:selectItems value="#{cadastroContaBean.pessoas}" /> </h:selectOneMenu>[/quote] Se você olhar lah no post que eu te passei, ele mostra que não adianta apenas declarar o converter no web.xml e esquê-lo lá. Você tem que declará-lo aí como converterId=“qqq”.

O seu mapeamento entre conta e pessoa não está definido corretamente. O atributo nome na classe Conta é uma entidade, e precisa ser definida como (one-to-one, many-to-one ou many-to-many) com as anotações corretas. O Seu mapeamento de many-to-one entre conta e pessoas está no atributo id, por isso está errado, acredito que se colocando esse mapeamento no getNome irá corrigir esse erro.

[quote=jakefrog][quote=xandi_m5]Se eu postar o projeto no SkyDriver vcs podem da uma olhada?? [/quote]Eu não.

[quote=xandi_m5]Ta aki:

<h:selectOneMenu id="pessoa" value="#{cadastroContaBean.contaEdicao.pessoa}" label="Pessoa" required="true"> <f:selectItems value="#{cadastroContaBean.pessoas}" /> </h:selectOneMenu>[/quote] Se você olhar lah no post que eu te passei, ele mostra que não adianta apenas declarar o converter no web.xml e esquê-lo lá. Você tem que declará-lo aí como converterId=“qqq”.[/quote]

Fiz isso o erro continua…

[code]package com.algaworks.dwjsf.financeiro.conversores;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.FacesConverter;

import com.algaworks.dwjsf.financeiro.dominio.Pessoa;
import com.algaworks.dwjsf.financeiro.negocio.PessoaService;
@FacesConverter(value=“pessoa_id”)
public class PessoaConverter implements Converter {
public Object getAsObject(FacesContext context, UIComponent component,
String value) throws ConverterException {
if (value == null) {
return null;
}
return new PessoaService().pesquisarPorId(Long.parseLong(value));
}

public String getAsString(FacesContext context, UIComponent component,
		Object object) throws ConverterException {
	if (object == null) {
		return null;
	}
	Pessoa pessoa = (Pessoa) object;
	return pessoa.getId().toString();
}

}[/code]

<h:selectOneMenu id="pessoa" value="#{cadastroContaBean.contaEdicao.pessoa}" label="Pessoa" required="true"> <f:converter converterId="pessoa_id"/> <f:selectItems value="#{cadastroContaBean.pessoas}" /> </h:selectOneMenu>
Agora fica erro na linha 2 (aqui ja estava antes e na linha 4 que eu coloquei com o ID)

Fiz isso o erro continua… :confused:

Eu postei no SkyDriver se alguem poder da uma olhada…

https://skydrive.live.com/?cid=d6b369f16014e7e3#cid=D6B369F16014E7E3&id=D6B369F16014E7E3!133

Obrigado

Pessoa os outros erros que disse acima ja resolvi… Mais ainda dá erro: :confused:
O erro agora é:

javax.servlet.ServletException: /contas/cadastroConta.jsp(35,6) '#{cadastroContaBean.pessoas}' Error reading 'pessoas' on type com.algaworks.dwjsf.financeiro.visao.CadastroContaBean javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)

Eu já olhei minha classe CadastroContaBean e não achei erro… Vcs pode ajudar??
O erro da quando entra nos metodos inicializar() e getPessoas(). Mais não sei o que tem de errado…

[code]package com.algaworks.dwjsf.financeiro.visao;

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

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;

import com.algaworks.dwjsf.financeiro.dominio.Conta;
import com.algaworks.dwjsf.financeiro.dominio.Pessoa;
import com.algaworks.dwjsf.financeiro.dominio.TipoConta;
import com.algaworks.dwjsf.financeiro.negocio.ContaService;
import com.algaworks.dwjsf.financeiro.negocio.PessoaService;
import com.algaworks.dwjsf.financeiro.negocio.RegraNegocioException;

public class CadastroContaBean {
private Conta contaEdicao;
private List tiposContas;
private List pessoas;

public String inicializar() {
	this.contaEdicao = new Conta();
	this.tiposContas = null;
	this.pessoas = null;
	return "cadastroConta";
}

public void salvar(ActionEvent event) {
	FacesContext context = FacesContext.getCurrentInstance();
	try {
		new ContaService().salvar(this.contaEdicao);
		this.contaEdicao = new Conta();
		FacesMessage msg = new FacesMessage("Conta salva com sucesso!");
		msg.setSeverity(FacesMessage.SEVERITY_INFO);
		context.addMessage(null, msg);
	} catch (RegraNegocioException e) {
		context.addMessage(
				null,
				new FacesMessage(FacesMessage.SEVERITY_ERROR, e
						.getMessage(), e.getMessage()));
	} catch (Exception e) {
		e.printStackTrace();
		FacesMessage msg = new FacesMessage(
				"Erro inesperado ao salvar conta!");
		msg.setSeverity(FacesMessage.SEVERITY_ERROR);
		context.addMessage(null, msg);
	}
}

public List<SelectItem> getPessoas() {
	if (this.pessoas == null) {
		this.pessoas = new ArrayList<SelectItem>();
		List<Pessoa> pessoas = new PessoaService().listarTodas();
		this.pessoas.add(new SelectItem(null, "Selecione"));
		for (Pessoa pessoa : pessoas) {
			this.pessoas.add(new SelectItem(pessoa, pessoa.getNome()));
		}
	}
	return this.pessoas;
}

public List<SelectItem> getTiposLancamentos() {
	if (this.tiposContas == null) {
		this.tiposContas = new ArrayList<SelectItem>();
		for (TipoConta tipo : TipoConta.values()) {
			this.tiposContas.add(new SelectItem(tipo, tipo.toString()));
		}
	}
	return tiposContas;
}

public Conta getContaEdicao() {
	return contaEdicao;
}

public void setContaEdicao(Conta contaEdicao) {
	this.contaEdicao = contaEdicao;
}

}[/code]

Também estou com este último problema.

Vc tb está estudando pela apostila da AlgaWorks???

Vc tb está estudando pela apostila da AlgaWorks???[/quote]

Estou sim cara.
A apostila é muito boa, porém pouca gente postou dúvidas a respeito dela… então fica difícil achar a solução de algumas coisas.

Vc tb está estudando pela apostila da AlgaWorks???[/quote]

Estou sim cara.
A apostila é muito boa, porém pouca gente postou dúvidas a respeito dela… então fica difícil achar a solução de algumas coisas.[/quote]

…Foi a melhor apostila de JSF que eu ja vi…
Eu tenho a atividade de exemplo usada nas aulas da algaworks se vc quiser é só manda seu e-mail que eu ti envio… OK
ps: a atividade é a finalização da apostila talvez demore um pouco pra vc entender…

Vc tb está estudando pela apostila da AlgaWorks???[/quote]

Estou sim cara.
A apostila é muito boa, porém pouca gente postou dúvidas a respeito dela… então fica difícil achar a solução de algumas coisas.[/quote]

…Foi a melhor apostila de JSF que eu ja vi…
Eu tenho a atividade de exemplo usada nas aulas da algaworks se vc quiser é só manda seu e-mail que eu ti envio… OK
ps: a atividade é a finalização da apostila talvez demore um pouco pra vc entender…[/quote]

Também foi a melhor que eu achei.
Cara, quero sim. Pelo menos pra eu ver o que posso estar fazendo de errado quando der algo errado.
Meu email: lesenaz@gmail.com

Obrigado!

Vc tb está estudando pela apostila da AlgaWorks???[/quote]

Estou sim cara.
A apostila é muito boa, porém pouca gente postou dúvidas a respeito dela… então fica difícil achar a solução de algumas coisas.[/quote]

…Foi a melhor apostila de JSF que eu ja vi…
Eu tenho a atividade de exemplo usada nas aulas da algaworks se vc quiser é só manda seu e-mail que eu ti envio… OK
ps: a atividade é a finalização da apostila talvez demore um pouco pra vc entender…[/quote]

Também foi a melhor que eu achei.
Cara, quero sim. Pelo menos pra eu ver o que posso estar fazendo de errado quando der algo errado.
Meu email: lesenaz@gmail.com

Obrigado![/quote]

Ja mandei…

Eu tbm que fhoda

Alguem pode enviar para mim tbm, iria ajudar muito osvaldo.junior@ymail.com

Obrigado

Se alguém ainda tiver esse código… pode me enviar tbm? Estou com o mesmo problema e não consigo resolver…

leandro2ki@hotmail.com

olá galera, boa tarde!!

poderiam me enviar esse código tbm…estou tenho problemas parecidos com os de vcs e não consigo avançar!!!

acho que o problema todo foi iniciar o projeto com jsf 2.0 e codificar da forma antiga (jsf 1.2)…

e-mail: leonardo.teles.almeida@gmail.com