Meu DataModel só mostra o ultimo elemento que eu inseri no banco[Resolvido]

9 respostas
nilopadilha
Bom dia pessoal, estou com mais uma dúvida, o meu DataModel não exibe todos os elementos do banco, criei um método para buscarTodos, mas quando mando exibir ele só exibe o ultimo elemento que acabei de inserir no banco e se eu mandar só listar não traz nada. Alguém poderia me ajudar? Classe MBean
package br.gera.Mbean;

import java.util.List;

import javax.faces.bean.ManagedBean;

import javax.faces.bean.SessionScoped;

import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import br.gera.Dao.PerguntaDao;
import br.gera.Dao.impl.PerguntaDaoImpl;
import br.gera.dominio.Pergunta;

@ManagedBean(name = "perguntaMBean")
@SessionScoped
public class PerguntaMBean {

	private Pergunta pergunta;
	private DataModel<Pergunta> perguntas;

	public DataModel<Pergunta> getListarPegunta() {
		List<Pergunta> lista = new PerguntaDaoImpl().buscarTodos();
		perguntas = new ListDataModel<Pergunta>(lista);
		return perguntas;
	}

	public Pergunta getPergunta() {
		if(pergunta == null) 
		pergunta = new Pergunta(); 
		return pergunta;
	}

	public void setPergunta(Pergunta pergunta) {
		this.pergunta = pergunta;
	}

	public String prepararAddPergunta() {
		pergunta = new Pergunta();
		return "form";

	}

	public String prepararAlterarPergunta() {
		pergunta = (Pergunta) (perguntas.getRowData());
		return "form";

	}

	public String Excluir() {

		Pergunta perguntemp = (Pergunta) (perguntas.getRowData());
		PerguntaDao dao = new PerguntaDaoImpl();
		dao.remover(perguntemp);
		return "index";

	}

	public String Salvar() {
		PerguntaDao dao = new PerguntaDaoImpl();
		dao.salvar(pergunta);
		return "index";

	}

	public String Alterar() {
		PerguntaDao dao = new PerguntaDaoImpl();
		dao.update(pergunta);
		return "index";

	}

}

Classe PerguntaDaoImpl

package br.gera.Dao.impl;




import java.util.List;


import org.hibernate.Session;
import org.hibernate.Transaction;

import br.gera.Dao.PerguntaDao;
import br.gera.dominio.Pergunta;
import br.gera.util.HibernateUtil;

public class PerguntaDaoImpl implements PerguntaDao {


	/* (non-Javadoc)
	 * @see br.gera.Dao.PerguntaDao#buscarTodos()
	 */
	@SuppressWarnings("unchecked")
	public List<Pergunta> buscarTodos() {
		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction t = session.beginTransaction();
		List<Pergunta> lista =  session.createQuery("from pergunta").list();
		t.commit();
		return lista ;

	}

	
//	@SuppressWarnings("unchecked")
//	public List<Pergunta> buscarPorId() {
//		Session session = HibernateUtil.getSessionFactory().openSession();
//		return  (List<Pergunta>) session.load(Pergunta.class, session);
//
//	}

	public void salvar(Pergunta pergunta) {
		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction t = session.beginTransaction();
		session.save(pergunta);
		t.commit();

	}

	public void remover(Pergunta pergunta) {
		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction t = session.beginTransaction();
		session.delete(pergunta);
		t.commit();
		

	}

	public void update(Pergunta pergunta) {
		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction t = session.beginTransaction();
		session.update(pergunta);
		t.commit();

	}



	
	

}

Classe PerguntaDao

package br.gera.Dao;

import java.util.List;

import br.gera.dominio.Pergunta;

public interface PerguntaDao {
	
	List<Pergunta> buscarTodos();
	
//	List<Pergunta> buscarPorId();

	void salvar(Pergunta pergunta);

	void remover(Pergunta pergunta);
	
	void update(Pergunta pergunta);
	
	
}
form.xhtml
<!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:ui="http://java.sun.com/jsf/facelets">


<h:form>
	
		
		Descrição: <h:inputText id="descricao"
		value="#{ perguntaMBean.pergunta.descricao }" />

	<br />
		Alternativa: <h:inputText id="alternativa"
		value="#{ perguntaMBean.pergunta.alternativa }" />

	<br />
		Resposta: <h:inputText id="resposta"
		value="#{ perguntaMBean.pergunta.resposta }" />

	<br />



	<h:inputHidden value="#{ perguntaMBean.pergunta.id }" />

	<h:commandButton value="Salvar" action="#{ perguntaMBean.Salvar() }" />
	<a href="lista.jsf">Listar</a>

</h:form>


</html>
lista.xhtml
<!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:ui="http://java.sun.com/jsf/facelets"
	>
<a href="form.jsf">Cadastrar nova pergunta</a>

<br />

<h:form>

	<h:dataTable rows="20" border="2" value="#{ perguntaMBean.pergunta}" var="e" style="width : 744px; height : 52px;">
	
		<h:column>
			<f:facet name="header">id</f:facet>
			<h:outputText value="#{ e.id }" />
		</h:column>
		<h:column>
			<f:facet name="header">descriçao</f:facet>
			<h:outputText value="#{ e.descricao }" />
		</h:column>
		<h:column>
			<f:facet name="header">alternativa</f:facet>
			<h:outputText value="#{ e.alternativa }" />
		</h:column>
		<h:column>
			<f:facet name="header">resposta</f:facet>
			<h:outputText value="#{ e.resposta }" />
		</h:column>

		<h:column>
			<h:commandButton value="Editar" action="#{ perguntaMBean.Alterar() }" />
		</h:column>

		<h:column>
			<h:commandButton value="Remover" action="#{ perguntaMBean.Excluir() }" />
		</h:column>

	</h:dataTable>


</h:form>

</html>

9 Respostas

Hebert_Coelho

Mas você está apontando seu datamodel para o value="#{ perguntaMBean.pergunta}" que realmente retorna apenas um objeto e não uma lista.

nilopadilha

Isso seria tanto no form quanto no lista?
poque quando e mudei no lista gera esse erro:

org.hibernate.hql.ast.QuerySyntaxException: pergunta is not mapped [from pergunta]
	org.hibernate.hql.ast.util.SessionFactoryHelper.requireClassPersister(SessionFactoryHelper.java:158)
	org.hibernate.hql.ast.tree.FromElementFactory.addFromElement(FromElementFactory.java:87)
	org.hibernate.hql.ast.tree.FromClause.addFromElement(FromClause.java:70)
	org.hibernate.hql.ast.HqlSqlWalker.createFromElement(HqlSqlWalker.java:255)
	org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElement(HqlSqlBaseWalker.java:3056)
	org.hibernate.hql.antlr.HqlSqlBaseWalker.fromElementList(HqlSqlBaseWalker.java:2945)
	org.hibernate.hql.antlr.HqlSqlBaseWalker.fromClause(HqlSqlBaseWalker.java:688)
	org.hibernate.hql.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:544)
	org.hibernate.hql.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:281)
	org.hibernate.hql.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:229)
	org.hibernate.hql.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:228)
	org.hibernate.hql.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:160)
	org.hibernate.hql.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:111)
	org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
	org.hibernate.engine.query.HQLQueryPlan.<init>(HQLQueryPlan.java:56)
	org.hibernate.engine.query.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:72)
	org.hibernate.impl.AbstractSessionImpl.getHQLQueryPlan(AbstractSessionImpl.java:133)
	org.hibernate.impl.AbstractSessionImpl.createQuery(AbstractSessionImpl.java:112)
	org.hibernate.impl.SessionImpl.createQuery(SessionImpl.java:1623)
	br.gera.Dao.impl.PerguntaDaoImpl.buscarTodos(PerguntaDaoImpl.java:26)
	br.gera.Mbean.PerguntaMBean.getListarPegunta(PerguntaMBean.java:27)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
	javax.el.CompositeELResolver.getValue(CompositeELResolver.java:67)
	com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:71)
	org.apache.el.parser.AstValue.getValue(AstValue.java:169)
	org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:189)
	com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:106)
	javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:190)
	javax.faces.component.ComponentStateHelper.eval(ComponentStateHelper.java:178)
	javax.faces.component.UIData.getValue(UIData.java:554)
	javax.faces.component.UIData.getDataModel(UIData.java:1278)
	javax.faces.component.UIData.setRowIndex(UIData.java:447)
	com.sun.faces.renderkit.html_basic.TableRenderer.encodeBegin(TableRenderer.java:77)
	javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:824)
	javax.faces.component.UIData.encodeBegin(UIData.java:937)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:1641)
	javax.faces.render.Renderer.encodeChildren(Renderer.java:164)
	javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:849)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:1643)
	javax.faces.component.UIComponent.encodeAll(UIComponent.java:1646)
	com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:389)
	com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:127)
	com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:117)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
	com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:135)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:309)
Hebert_Coelho

Sua consulta em JPQL tem que escrever exatamente o mesmo nome da classe, você declarou sua classe como pergunta ou Pergunta?

nilopadilha

Pergunta

nilopadilha

Cara brigadão, deu muito certo!!!

nilopadilha

tenho mais umas duvidas aqui posso tirar com você?

Hebert_Coelho

Só abrir um post com suas dúvidas que alguém vai tentar responder.

nilopadilha

Bem a outra duvida seria o seguinte: o meu método alterar dessa mesma aplicação não esta alterando.
Então quando eu tento alterar da o seguinte erro:

javax.servlet.ServletException: java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)
nilopadilha

Boa tarde pessoal, estou com probleminha na minha aplicação jsf, criei um crud na aplicação deu certo para inserir e excluir, mas na hora de editar ou ela insere um novo elemento no banco de dados.
conforme vocês poderão ver no meu código:

classe Pergunta.

package br.gera.dominio;

import java.io.Serializable;

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




@Table(name="pergunta")
@Entity
public class Pergunta implements Serializable {	

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Id 
	@GeneratedValue(strategy=GenerationType.IDENTITY)  
	private long id;

	private String descricao;

	private String alternativa;

	private String resposta;
	
	
	public Pergunta(){
		
	}

	public Pergunta( long id, String descr, String alterna, String resp){
		this.id = id;
		this.descricao = descr;
		this.alternativa = alterna;
		this.resposta =resp;
		
		
	}

	

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getDescricao() {
		return descricao;
	}

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


	public String getAlternativa() {
		return alternativa;
	}

	public void setAlternativa(String alternativa) {
		this.alternativa = alternativa;
	}

	public String getResposta() {
		return resposta;
	}

	public void setResposta(String resposta) {
		this.resposta = resposta;
	}

	

}

interface PerguntaDao.

package br.gera.Dao;

import java.util.List;

import br.gera.dominio.Pergunta;

public interface PerguntaDao {
	
	List<Pergunta> buscarTodos();
	
//	List<Pergunta> buscarPorId();

	void salvar(Pergunta pergunta);

	void remover(Pergunta pergunta);
	
	void Update(Pergunta pergunta);
	
	
}

classe PerguntaDaoImpl

package br.gera.Dao.impl;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;

import br.gera.Dao.PerguntaDao;
import br.gera.dominio.Pergunta;
import br.gera.util.HibernateUtil;

public class PerguntaDaoImpl implements PerguntaDao {

	/*
	 * (non-Javadoc)
	 * 
	 * @see br.gera.Dao.PerguntaDao#buscarTodos()
	 */
	@SuppressWarnings("unchecked")
	public List<Pergunta> buscarTodos() {
		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction t = session.beginTransaction();
		List<Pergunta> lista = session.createQuery("from Pergunta").list();
		t.commit();
		return lista;

	}

	// @SuppressWarnings("unchecked")
	// public List<Pergunta> buscarPorId() {
	// Session session = HibernateUtil.getSessionFactory().openSession();
	// return (List<Pergunta>) session.load(Pergunta.class, session);
	//
	// }

	public void salvar(Pergunta pergunta) {
		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction t = session.beginTransaction();
		session.save(pergunta);
		t.commit();
		session.clear();
		session.close();

	}

	public void remover(Pergunta pergunta) {
		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction t = session.beginTransaction();
		session.delete(pergunta);
		t.commit();

	}

	public void Update(Pergunta pergunta){

		Session session = HibernateUtil.getSessionFactory().openSession();
		Transaction t = session.beginTransaction();
		session.update(pergunta);
		session.flush();
		t.commit();
		session.clear();
		session.close();
		
		

	}

}

PerguntaMBean

package br.gera.Mbean;

import java.util.List;

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




import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import br.gera.Dao.PerguntaDao;
import br.gera.Dao.impl.PerguntaDaoImpl;
import br.gera.dominio.Pergunta;

@ManagedBean(name = "perguntaMBean")
@SessionScoped
public class PerguntaMBean {

	private Pergunta pergunta;
	private DataModel<Pergunta> perguntas;

	public DataModel<Pergunta> getListarPegunta() {
		List<Pergunta> lista = new PerguntaDaoImpl().buscarTodos();
		perguntas = new ListDataModel<Pergunta>(lista);
		return perguntas;
	}

	public Pergunta getPergunta() {
		if(pergunta == null) 
		pergunta = new Pergunta(); 
		return pergunta;
	}

	public void setPergunta(Pergunta pergunta) {
		this.pergunta = pergunta;
	}

	public String prepararAddPergunta() {
		pergunta = new Pergunta();
		return "form";

	}

	public String prepararAlterarPergunta() {
		pergunta = (Pergunta) (perguntas.getRowData());
		return "form";

	}

	public String Excluir() {

		Pergunta perguntemp = (Pergunta) (perguntas.getRowData());
		PerguntaDao dao = new PerguntaDaoImpl();
		dao.remover(perguntemp);
		return "form";

	}

	public String Salvar() {
		PerguntaDao dao = new PerguntaDaoImpl();
		dao.salvar(pergunta);
		return "index";

	}

	public String Alterar() {
		PerguntaDao dao = new PerguntaDaoImpl();
		dao.Update(pergunta);
		return "form";

	}

}

form

<!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:ui="http://java.sun.com/jsf/facelets">


<h:form >
	
		
		Descrição: <h:inputText id="descricao"
		value="#{ perguntaMBean.pergunta.descricao }" />

	<br />
		Alternativa: <h:inputText id="alternativa"
		value="#{ perguntaMBean.pergunta.alternativa }" />

	<br />
		Resposta: <h:inputText id="resposta"
		value="#{ perguntaMBean.pergunta.resposta }" />

	<br />



	<h:inputHidden value="#{ perguntaMBean.pergunta.id }" />

	<h:commandButton value="Salvar" action="#{ perguntaMBean.Salvar() }" />
	<a href="lista.jsf">Listar</a>

</h:form>


</html>

lista

<!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:ui="http://java.sun.com/jsf/facelets"
	>
<a href="form.jsf">Cadastrar nova pergunta</a>

<br />

<h:form>

	<h:dataTable rows="20" border="2" value="#{ perguntaMBean.listarPegunta}" var="e" style="width : 744px; height : 52px;">
	
		<h:column>
			<f:facet name="header">id</f:facet>
			<h:outputText value="#{ e.id }" />
		</h:column>
		<h:column>
			<f:facet name="header">descriçao</f:facet>
			<h:outputText value="#{ e.descricao }" />
		</h:column>
		<h:column>
			<f:facet name="header">alternativa</f:facet>
			<h:outputText value="#{ e.alternativa }" />
		</h:column>
		<h:column>
			<f:facet name="header">resposta</f:facet>
			<h:outputText value="#{ e.resposta }" />
		</h:column>

		<h:column>
			<h:commandButton value="Editar" action="#{ perguntaMBean.Alterar() }" />
		</h:column>

		<h:column>
			<h:commandButton value="Remover" action="#{ perguntaMBean.Excluir() }" />
		</h:column>

	</h:dataTable>


</h:form>

</html>

E quando eu rodo somente a lista para lista os elementos do banco e mando editar exibe esse erro abaixo:

HTTP Status 500 - 

--------------------------------------------------------------------------------

type Exception report

message 

description The server encountered an internal error () that prevented it from fulfilling this request.

exception 

javax.servlet.ServletException: java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:321)


root cause 

javax.faces.el.EvaluationException: java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
	javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:98)
	com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
	javax.faces.component.UICommand.broadcast(UICommand.java:311)
	javax.faces.component.UIData.broadcast(UIData.java:912)
	javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
	javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)


root cause 

java.lang.IllegalArgumentException: attempt to create saveOrUpdate event with null entity
	org.hibernate.event.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:40)
	org.hibernate.event.SaveOrUpdateEvent.<init>(SaveOrUpdateEvent.java:23)
	org.hibernate.impl.SessionImpl.update(SessionImpl.java:552)
	org.hibernate.impl.SessionImpl.update(SessionImpl.java:544)
	br.gera.Dao.impl.PerguntaDaoImpl.Update(PerguntaDaoImpl.java:58)
	br.gera.Mbean.PerguntaMBean.Alterar(PerguntaMBean.java:71)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	java.lang.reflect.Method.invoke(Unknown Source)
	org.apache.el.parser.AstValue.invoke(AstValue.java:264)
	org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
	com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:102)
	javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:84)
	com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:98)
	javax.faces.component.UICommand.broadcast(UICommand.java:311)
	javax.faces.component.UIData.broadcast(UIData.java:912)
	javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:781)
	javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1246)
	com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:77)
	com.sun.faces.lifecycle.Phase.doPhase(Phase.java:97)
	com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:114)
	javax.faces.webapp.FacesServlet.service(FacesServlet.java:308)


note The full stack trace of the root cause is available in the Apache Tomcat/7.0.27 logs.


--------------------------------------------------------------------------------

Apache Tomcat/7.0.27
Criado 21 de maio de 2012
Ultima resposta 21 de mai. de 2012
Respostas 9
Participantes 2