Erro no meu projeto (JSF +Hirbenate). Detalhes...

29/11/2011

0

1° No meu faces.config.xml tem o seguinte código( só uma parte):
<converter>
<converter-for-class>java.lang.Enum</converter-for-class>
<converter-class>com.algaworks.dwjsf.financeiro.conversores.EnumConverter</converter-class>
</converter>

O eclipse acusa erro na linha 2, diz que a classe java.lang.Enum não pode ser abstrata...

2º No meu .jsp tem o código(uma parte):
<h:panelGroup>
<h:selectOneMenu id=pessoa
value=#{cadastroContaBean.contaEdicao.pessoa} label=Pessoa
required=true>
<f:selectItems value=#{cadastroContaBean.pessoas} />
</h:selectOneMenu>
<h:message for=pessoa showSummary=true showDetail=false
styleClass=msgErro />
</h:panelGroup>

Acusa erro na linha 3, diz que pessoa não pode ser resolvido...

Quando executa mostra isso:
29/11/2011 12:57:49 com.sun.faces.lifecycle.Phase doPhase
SEVERE: JSF1054: (Phase ID: RENDER_RESPONSE 6, View ID: /contas/cadastroConta.jsp) Exception thrown during phase execution: javax.faces.event.PhaseEvent[source=com.sun.faces.lifecycle.LifecycleImpl@15e4dbe]
29/11/2011 12:57:49 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NoClassDefFoundError: Could not initialize class com.algaworks.dwjsf.financeiro.util.HibernateUtil
at com.algaworks.dwjsf.financeiro.negocio.PessoaService.listarTodas(PessoaService.java:25)
...

Ps: A vzes aparece a tela(o formulario)... mais não aparece nada no SelectOneMenu, e não da pra salvar pois a campo não pode está em branco...

Se necessário... Coloque as classes que eu acho que são mais relaventes pro erro... se precisar de mais...
Classes:
Classe Pessoa:
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;
}

}

Converso Pessoa:
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 com.algaworks.dwjsf.financeiro.dominio.Pessoa;
import com.algaworks.dwjsf.financeiro.negocio.PessoaService;

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

Pessoa service:
import java.util.List;

import org.hibernate.Session;
import org.hibernate.criterion.Order;

import com.algaworks.dwjsf.financeiro.dominio.Pessoa;
import com.algaworks.dwjsf.financeiro.util.HibernateUtil;


public class PessoaService {
public Pessoa pesquisarPorId(Long id) {
Session session = HibernateUtil.getSession();
try {
return (Pessoa) session.get(Pessoa.class, id);
} finally {
session.close();
}
}


@SuppressWarnings(unchecked)
public List<Pessoa> listarTodas() {
Session session = HibernateUtil.getSession();
try {
return session.createCriteria(Pessoa.class)
.addOrder(Order.asc(nome)).list();
} finally {
session.close();
}
}
}

JSP onde ta o erro:
<%@ page contentType=text/html; charset=ISO-8859-1
pageEncoding=ISO-8859-1%>
<%@ taglib prefix=f uri=http://java.sun.com/jsf/core%>
<%@ taglib prefix=h uri=http://java.sun.com/jsf/html%>
<html>
<head>
<title>Cadastro de conta</title>
<link rel=stylesheet type=text/css href=../css/estilo.css />
</head>
<body>
<div>
<f:view>
<h:form id=frm>
<h1>
<h:outputText value=Cadastro de conta />
</h1>
<h:messages layout=table showSummary=true showDetail=false
globalOnly=true styleClass=msgErro infoClass=msgInfo
style=font-weight: bold />
<h:panelGrid columns=2>
<h:outputLabel value=Código:
rendered=#{cadastroContaBean.contaEdicao.id!= null} />
<h:panelGroup rendered=#{cadastroContaBean.contaEdicao.id!= null}>
<h:inputText id=codigo size=10
value=#{cadastroContaBean.contaEdicao.id}
label=Código da conta disabled=true />
<h:message for=codigo showSummary=true showDetail=false
styleClass=msgErro />
</h:panelGroup>
<h:outputLabel value=Pessoa: />
<h:panelGroup>
<h:selectOneMenu id=pessoa
value=#{cadastroContaBean.contaEdicao.pessoa} label=Pessoa Erro aqui
required=true>
<f:selectItems value=#{cadastroContaBean.pessoas} />
</h:selectOneMenu>
<h:message for=pessoa showSummary=true showDetail=false
styleClass=msgErro />
</h:panelGroup>
<h:outputLabel value=Tipo: />
<h:panelGroup>
<h:selectOneRadio id=tipo
value=#{cadastroContaBean.contaEdicao.tipo}
label=Tipo da conta required=true>
<f:selectItems value=#{cadastroContaBean.tiposLancamentos} />
</h:selectOneRadio>
<h:message for=tipo showSummary=true showDetail=false
styleClass=msgErro />
</h:panelGroup>
<h:outputLabel value=Descrição: />
<h:panelGroup>
<h:inputText id=descricao size=40 maxlength=150
value=#{cadastroContaBean.contaEdicao.descricao} required=true
label=Descrição />
<h:message for=descricao showSummary=true showDetail=false
styleClass=msgErro />
</h:panelGroup>
<h:outputLabel value=Valor: />
<h:panelGroup>
<h:inputText id=valor size=12 maxlength=10
value=#{cadastroContaBean.contaEdicao.valor} required=true
label=Valor>
<f:convertNumber minFractionDigits=2 />
</h:inputText>
<h:message for=valor showSummary=true showDetail=false
styleClass=msgErro />
</h:panelGroup>
<h:outputLabel value=Data vencimento: />
<h:panelGroup>
<h:inputText id=dataVencimento size=12 maxlength=10
value=#{cadastroContaBean.contaEdicao.dataVencimento}
required=true label=Data vencimento>
<f:convertDateTime pattern=dd/MM/yyyy />
</h:inputText>
<h:message for=dataVencimento showSummary=true
showDetail=false styleClass=msgErro />
</h:panelGroup>
<h:outputLabel value=Data baixa: />
<h:panelGroup>
<h:inputText id=dataBaixa size=12 maxlength=10
value=#{cadastroContaBean.contaEdicao.dataBaixa}
label=Data baixa>
<f:convertDateTime pattern=dd/MM/yyyy />
</h:inputText>
<h:message for=dataBaixa showSummary=true showDetail=false
styleClass=msgErro />
</h:panelGroup>
<h:panelGroup />
<h:panelGroup>
<h:commandButton value=Salvar
actionListener=#{cadastroContaBean.salvar} styleClass=botao />
<h:commandButton value=Cancelar action=menu immediate=true
styleClass=botao />
</h:panelGroup>
</h:panelGrid>
</h:form>
</f:view>
</div>
</body>
</html>




ps: Eu ja tinha colocado o projeto no SkyDriver, não sei se vcs tem tempo pra ver mais
https://skydrive.live.com/redir.aspx?cid=d6b369f16014e7e3&resid=D6B369F16014E7E3!133
Alexandre

Alexandre

Responder

Posts

29/11/2011

Davi Costa

cara reveja toda essa declaração do converter. abaixo segue alguns exemplos:

http://www.roseindia.net/jsf/customconverter.shtml
http://laliluna.com/articles/posts/javaserver-faces-converter-tutorial.html

att Davi

Responder

29/11/2011

Alexandre

cara reveja toda essa declaração do converter. abaixo segue alguns exemplos:

http://www.roseindia.net/jsf/customconverter.shtml
http://laliluna.com/articles/posts/javaserver-faces-converter-tutorial.html

att Davi



Cara de inicio eu fiz a declaração, mais de erro, então eu copiei e colei da apostila...
Mais vou dá uma olhada qualquer coisa volto aki... =D
Responder

29/11/2011

Alexandre

cara reveja toda essa declaração do converter. abaixo segue alguns exemplos:

http://www.roseindia.net/jsf/customconverter.shtml
http://laliluna.com/articles/posts/javaserver-faces-converter-tutorial.html

att Davi


Cara fico assim:
<converter>
<converter-id>converterEnum</converter-id>
<converter-class>com.algaworks.dwjsf.financeiro.conversores.EnumConverter</converter-class>
</converter>
E no .jsp assim:
<h:panelGroup>
<h:selectOneMenu id=pessoa
value=#{cadastroContaBean.contaEdicao.pessoa} label=Pessoa
required=true>
<f:converter converterId=converterEnum />
<f:selectItems value=#{cadastroContaBean.pessoas} />
</h:selectOneMenu>
<h:message for=pessoa showSummary=true showDetail=false
styleClass=msgErro />
</h:panelGroup>

Mais o erro continua... :/
Responder

29/11/2011

Alexandre

O erro que dá é:
javax.servlet.ServletException: /contas/cadastroConta.jsp(36,6) #{cadastroContaBean.pessoas} Error reading pessoas on type com.algaworks.dwjsf.financeiro.visao.CadastroContaBean
javax.faces.webapp.FacesServlet.service(FacesServlet.java:277)
Responder

30/11/2011

Davi Costa

Taki o erro: Error reading pessoas on type com.algaworks.dwjsf.financeiro.visao.CadastroContaBean
, procura esse método no bean e vê o que tá acontecendo: cadastroContaBean.getPessoas();

att Davi
Responder

01/12/2011

Alexandre

Taki o erro: Error reading pessoas on type com.algaworks.dwjsf.financeiro.visao.CadastroContaBean
, procura esse método no bean e vê o que tá acontecendo: cadastroContaBean.getPessoas();

att Davi


Cara eu não achei o erro nessa minha classe:

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<SelectItem> tiposContas;
private List<SelectItem> 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;
}
}
Será que vc pode ver??? Se precisar de mais algum classe só falar...


Responder

06/12/2011

Dyego Carmo

Deu certo ?

Resolvido ?

Se sim , por favor poderia fechar o chamado ?

Valeu !
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar