Bom dia pessoal,
Bem passei por alguns probleminhas fazendo essa aplicação mais agora ela já esta quase pronta, mas ainda existe uma coisa que não consigo resolver, não estou conseguindo recuperar o objeto, para vincular o objeto pergunta com as alternativas que é uma lista de alternativas que eu vou ter para cada questão cadastrada no banco.
segue abaixo o meu código.
Classe alternativa
package br.gera.quiz.dominio;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
@Entity
@Table(name = "alternativa")
public class Alternativa implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String descricao;
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "id_pergunta", referencedColumnName="id")
private Pergunta pergunta;
public Alternativa() {
}
public Alternativa(long id, String descricao) {
this.id = id;
this.descricao = descricao;
}
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 Pergunta getPergunta() {
return pergunta;
}
public void setPergunta(Pergunta pergunta) {
this.pergunta = pergunta;
}
}
classe pergunta
package br.gera.quiz.dominio;
import java.io.Serializable;
import java.util.Collection;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
@Entity
@Table(name = "pergunta")
public class Pergunta implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
private String descricao;
@OneToMany(mappedBy="pergunta")
private Collection<Alternativa> alternativas;
public Pergunta() {
}
public Pergunta(long id, String descricao) {
this.id = id;
this.descricao = descricao;
}
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 Collection<Alternativa> getAlternativas() {
return alternativas;
}
public void setAlternativas(Collection<Alternativa> alternativas) {
this.alternativas = alternativas;
}
}
alternativaDao
package br.gera.quiz.dados;
import java.util.List;
import br.gera.quiz.dominio.Alternativa;
public interface AlternativaDao {
List<Alternativa> buscarTodos();
List<Alternativa> buscarporid(long id);
void salvar(Alternativa alternativa);
void remover(Alternativa alternativa);
}
perguntaDao
package br.gera.quiz.dados;
import java.util.List;
import br.gera.quiz.dominio.Pergunta;
public interface PerguntaDao {
List<Pergunta> buscarTodos();
List<Pergunta> buscarporid(long id);
void salvar(Pergunta pergunta);
void remover(Pergunta pergunta);
}
Abstractdao
package br.gera.quiz.dados.impl;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.List;
import javax.inject.Inject;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.HibernateTemplate;
public abstract class AbstractDAO<T> {
@Inject
private HibernateTemplate ht;
public void salvar(T obj) {
ht.saveOrUpdate(obj);
}
public void remover(T obj) {
ht.delete(obj);
}
@SuppressWarnings("unchecked")
public List<T> buscarTodos() {
ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
Type param = type.getActualTypeArguments()[0];
return ht.loadAll((Class<T>) param);
}
@SuppressWarnings("unchecked")
public List<T> buscarporid(long id) {
ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
Type param = type.getActualTypeArguments()[0];
DetachedCriteria criteria = DetachedCriteria.forClass((Class<T>) param);
criteria.add(Restrictions.idEq(id));
List<T> results = ht.findByCriteria(criteria);
return results;
}
}
altenativaDaoImpl
package br.gera.quiz.dados.impl;
import org.springframework.stereotype.Component;
import br.gera.quiz.dados.AlternativaDao;
import br.gera.quiz.dominio.Alternativa;
@Component
public class AlternativaDaoImpl extends AbstractDAO<Alternativa> implements AlternativaDao {
}
perguntaDAOIMPL
package br.gera.quiz.dados.impl;
import org.springframework.stereotype.Component;
import br.gera.quiz.dados.PerguntaDao;
import br.gera.quiz.dominio.Pergunta;
@Component
public class PerguntaDaoImpl extends AbstractDAO<Pergunta> implements PerguntaDao {
}
SpringConfig
package br.gera.quiz.escopo;
import java.util.HashMap;
import java.util.Map;
import org.springframework.beans.factory.config.CustomScopeConfigurer;
import org.springframework.context.annotation.Bean;
public class SpringConfig {
@Bean
public CustomScopeConfigurer escoposPersonalizados() {
CustomScopeConfigurer c = new CustomScopeConfigurer();
Map<String, Object> escopos = new HashMap<String, Object>();
escopos.put("view", new ViewScope());
c.setScopes(escopos);
return c;
}
}
Viewscope
package br.gera.quiz.escopo;
import java.util.Map;
import javax.faces.context.FacesContext;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.beans.factory.config.Scope;
public class ViewScope implements Scope {
public Object get(String name, ObjectFactory<?> objectFactory) {
Map<String, Object> viewMap = FacesContext.getCurrentInstance()
.getViewRoot().getViewMap();
if (viewMap.containsKey(name)) {
return viewMap.get(name);
} else {
Object object = objectFactory.getObject();
viewMap.put(name, object);
return object;
}
}
public Object remove(String name) {
return FacesContext.getCurrentInstance().getViewRoot().getViewMap()
.remove(name);
}
public String getConversationId() {
return null;
}
public void registerDestructionCallback(String name, Runnable callback) {
}
public Object resolveContextualObject(String name) {
return null;
}
}
GerenciadorPerguntas
package br.gera.quiz.negocio;
import java.util.List;
import br.gera.quiz.dominio.Pergunta;
public interface GerenciadorPerguntas {
List<Pergunta> buscarTodos();
List<Pergunta> buscarporid(long id);
void remover(Pergunta pergunta);
void salvar(Pergunta pergunta);
}
gerenciadorAlternativas
package br.gera.quiz.negocio;
import java.util.List;
import br.gera.quiz.dominio.Alternativa;
public interface GerenciadorAlternativa {
List<Alternativa> buscarTodos();
List<Alternativa> buscarporid(long id);
void salvar(Alternativa alternativa);
void remover(Alternativa alternativa);
}
GerenciadorPerguntaImpl
package br.gera.quiz.negocio.Impl;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Component;
import br.gera.quiz.dados.PerguntaDao;
import br.gera.quiz.dominio.Pergunta;
import br.gera.quiz.negocio.GerenciadorPerguntas;
@Component
public class GerenciadorPerguntaImpl implements GerenciadorPerguntas {
@Inject
private PerguntaDao dao;
@Override
public List<Pergunta> buscarTodos() {
// TODO Auto-generated method stub
return dao.buscarTodos();
}
@Override
public List<Pergunta> buscarporid(long id) {
// TODO Auto-generated method stub
return dao.buscarporid(id);
}
@Override
public void remover(Pergunta pergunta) {
dao.remover(pergunta);
}
@Override
public void salvar(Pergunta pergunta) {
dao.salvar(pergunta);
}
}
gerenciadorAlternativasIMP
package br.gera.quiz.negocio.Impl;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Component;
import br.gera.quiz.dados.AlternativaDao;
import br.gera.quiz.dominio.Alternativa;
import br.gera.quiz.negocio.GerenciadorAlternativa;
@Component
public class GerenciamentoAlternativaImpl implements GerenciadorAlternativa {
@Inject
private AlternativaDao dao;
@Override
public List<Alternativa> buscarTodos() {
return dao.buscarTodos();
}
@Override
public List<Alternativa> buscarporid(long id) {
// TODO Auto-generated method stub
return dao.buscarporid(id);
}
@Override
public void salvar(Alternativa alternativa) {
dao.salvar(alternativa);
}
@Override
public void remover(Alternativa alternativa) {
dao.remover(alternativa);
}
}
perguntaMBEAN
package br.gera.quiz.Apresentacao;
import java.io.Serializable;
import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import br.gera.quiz.dominio.Pergunta;
import br.gera.quiz.negocio.GerenciadorPerguntas;
@Component
@Scope("view")
public class PerguntaMBean implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Inject
private GerenciadorPerguntas gerenciador;
private Pergunta pergunta = new Pergunta();
private ListDataModel<Pergunta> perguntas;
public String salvar() {
gerenciador.salvar(pergunta);
return "lista";
}
public String remover() {
pergunta = perguntas.getRowData();
gerenciador.remover(pergunta);
return null;
}
public ListDataModel<Pergunta> getPerguntas() {
perguntas = new ListDataModel<Pergunta>(gerenciador.buscarTodos());
return perguntas;
}
public Pergunta getPergunta() {
return pergunta;
}
public void setPergunta(Pergunta pergunta) {
this.pergunta = pergunta;
}
public void setPerguntas(ListDataModel<Pergunta> perguntas) {
this.perguntas = perguntas;
}
}
AlternativaMbean
package br.gera.quiz.Apresentacao;
import javax.faces.model.ListDataModel;
import javax.inject.Inject;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import br.gera.quiz.dominio.Alternativa;
import br.gera.quiz.negocio.GerenciadorAlternativa;
@Component
@Scope("view")
public class AlternativaMBean {
@Inject
private GerenciadorAlternativa gerenciador;
private Alternativa alternativa = new Alternativa();
private ListDataModel<Alternativa> alternativas;
public String salvar() {
gerenciador.salvar(alternativa);
return "testelista";
}
public String remover() {
alternativa = alternativas.getRowData();
gerenciador.remover(alternativa);
return null;
}
public ListDataModel<Alternativa> getAlternativas() {
alternativas = new ListDataModel<Alternativa>(gerenciador.buscarTodos());
return alternativas;
}
public Alternativa getAlternativa() {
return alternativa;
}
public void setAlternativa(Alternativa alternativa) {
this.alternativa = alternativa;
}
public void setAlternativas(ListDataModel<Alternativa> alternativas) {
this.alternativas = alternativas;
}
}
Formulários: Aqui nos formulários, queria saber se teria como no momento em que vou lista, poder fazer um select que mostrasse a pergunta com suas devidas alternativas?
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 />
<h:inputHidden value="#{ perguntaMBean.pergunta.id }" />
<h:commandButton value="Salvar" action="#{ perguntaMBean.salvar() }" />
</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 value="#{perguntaMBean.perguntas}" var="e">
<h:column>
<f:facet name="header">id</f:facet>
#{ e.id }
</h:column>
<h:column>
<f:facet name="header">descricao</f:facet>
#{ e.descricao }
</h:column>
<h:column>
<h:commandButton value="Remover" action="#{ perguntaMBean.remover }" />
</h:column>
</h:dataTable>
</h:form>
<a href="teste.jsf">Cadastrar respostas</a>
<br />
<h:form>
<h:dataTable value="#{alternativaMBean.alternativas}" var="r">
<h:column>
<f:facet name="header">id</f:facet>
#{ r.id }
</h:column>
<h:column>
<f:facet name="header">descricao</f:facet>
#{ r.descricao }
</h:column>
<h:column>
<f:facet name="header">pergunta</f:facet>
#{ r.pergunta }
</h:column>
<h:column>
<h:commandButton value="Remover" action="#{ alternativaMBean.removerAlter }" />
</h:column>
</h:dataTable>
</h:form>
</html>
formAlter
<!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>
Respostas:<h:inputText id="descricao"
value="#{ alternativaMBean.alternativa.descricao}" /> <br />
<h:inputHidden value="#{ alternativaMBean.alternativa.id }" />
<h:commandButton value="Salvar" action="#{ alternativaMBean.salvar() }" />
<a href="lista.jsf">Listar</a>
</h:form>
</html>