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…
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:
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
Se alguém ainda tiver esse código… pode me enviar tbm? Estou com o mesmo problema e não consigo resolver…
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