[RESOLVIDO]Preencher combo com hibernate e vraptor

Boa tarde Amigos.
Já vi vários tópicos com problemas parecidos com o meu, mas as soluções encontradas não estão sendo úteis no meu treinamento.
Como faço para preencher um combo com os dados de um País em um formulário para adicionar um novo estado.
Até consigo inserir o estado com um input type=text, mas aí não quero que o código do País seja digitado e sim, selecionado.
Seguem os códigos.

EstadoController


package br.com.offline.local.controller;  
  
import java.util.List;  
  
import br.com.caelum.vraptor.Resource;  
import br.com.caelum.vraptor.Result;  
import br.com.offline.local.Estado;  
import br.com.offline.local.dao.EstadoDAO;  
  
@Resource  
public class EstadoController {  
  
    private final EstadoDAO dao;  
    private final Result result;  
      
    public void novoEstado(){}  
      
    public EstadoController(EstadoDAO dao, Result result){  
        this.dao = dao;  
        this.result = result;  
    }  
      
    // Métodos dao.  
    public void adiciona(Estado estado){  
        dao.adiciona(estado);  
        result.redirectTo(EstadoController.class).estadoAdicionado();  
    }  
      
    public List<Estado> listaEstado(){  
        return dao.listaEstado();  
    }  
      
    public String estadoAdicionado(){  
        return "/estado/estadoAdicionado.jsp";  
    }  
  
}  

EstadoDAO


package br.com.offline.local.dao;  
  
import java.util.List;  
  
import org.hibernate.Session;  
import org.hibernate.Transaction;  
  
import br.com.caelum.vraptor.ioc.Component;  
import br.com.offline.infra.CriaSession;  
import br.com.offline.local.Estado;  
  
@Component  
public class EstadoDAO {  
      
    private final Session session;  
      
    public EstadoDAO(){  
        this.session = CriaSession.getSession();  
    }  
  
    public void adiciona(Estado estado){  
        Transaction transaction = session.beginTransaction();  
        session.save(estado);  
        transaction.commit();  
    }  
      
    public void altera(Estado estado){  
        Transaction transaction = session.beginTransaction();  
        session.update(estado);  
        transaction.commit();  
    }  
      
    public void remove(Estado estado){  
        Transaction transaction = session.beginTransaction();  
        session.delete(estado);  
        transaction.commit();  
    }  
      
    public Estado carrega(Long codigo){  
        return (Estado) this.session.load(Estado.class, codigo);  
    }  
      
    @SuppressWarnings("unchecked")  
    public List<Estado> listaEstado(){  
        return session.createCriteria(Estado.class).list();  
    }  
}  

novoEstado.jsp


<%@ page language="java" contentType="text/html; charset=ISO-8859-1"  
    pageEncoding="ISO-8859-1"%>  
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>  
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>  
<jsp:useBean id="dao" class="br.com.offline.local.dao.PaisDAO"></jsp:useBean>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">  
<title>Insert title here</title>  
</head>  
<body>  
    <h3>Adicionando um novo Estado.</h3>  
  
    <form action="adiciona" method="post" name="novoEstado">  
        <fieldset>  
            <legend>Adicionar Estado</legend>  
            <input id="codigo" type="hidden" name="estado.codigo" /> <br />  
              
            <label for="nome">Nome:</label>  
            <input id="nome" type="text" name="estado.nome" /> <br />  
              
            <label for="sigla">Sigla:</label>  
            <input id="sigla" type="text" name="estado.sigla" maxlength="2" /> <br />  
              
            <label for="pais"> País:</label>  
              
            <!-- Com esse input funciona. Mas não quero ter que digitar o código sempre -->  
            <input id="pais" type="text" name="estado.pais.codigo"></input>  
              
            <!-- O select não está retornando nenhum valor -->  
            <select id="pais" name="estado.pais.codigo">  
                <option id="pais">Selecione</option>  
                <c:forEach items="${paisList }" var="pais">  
                    <option id="pais" value="${pais.codigo }"> ${pais.nome } </option>  
                </c:forEach>  
            </select>  
            <button type="submit">Enviar</button>  
        </fieldset>  
    </form>  
    <br />  
</body>  
</html>  

O que preciso no momento é que esse carregue os nomes dos Países e salve no banco, na tabela Estado (coluna = pais) o código do país…
Isso eu consigo digitando o código do país no input.
Conto com o apoio de todos no avanço dos meus estudos.
Desde já lhes agradeço.

faz a consulta no metodo novoEstado


public void novoEstado(){
List<Pais> paises = dao.listaPaises();
result.include("paises", paises );

}  

no seu jsp

<select id="pais" name="estado.pais.codigo">    
                <option id="pais">Selecione</option>    
                <c:forEach items="${paises}" var="pais">    
                    <option id="pais" value="${pais.codigo }"> ${pais.nome } </option>    
                </c:forEach>    
            </select>    

DaniloAndrade

Você foi simples e objetivo.
Muito obrigado mesmo por compartilhar seu conhecimento.
Eu estava há alguns dias tentando por conta própria resolver mas não conseguia.
Muito obrigado!

por nada.

agente se ajuda e nossa comunidade aumenta, rsrsr

edita seu primeiro post e coloca a tag [Resolvido] no titulo do post

[quote=DaniloAndrade]faz a consulta no metodo novoEstado


public void novoEstado(){
List<Pais> paises = dao.listaPaises();
result.include("paises", paises );

}  

no seu jsp

<select id="pais" name="estado.pais.codigo">    
                <option id="pais">Selecione</option>    
                <c:forEach items="${paises}" var="pais">    
                    <option id="pais" value="${pais.codigo }"> ${pais.nome } </option>    
                </c:forEach>    
            </select>    

[/quote]

Tentei aplicar esta solução e estou obtendo o seguinte erro:

HTTP Status 500 - exception raised, check root cause for details: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.gfkauer.carcontrol.modelo.Fabricante

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

type Exception report

message exception raised, check root cause for details: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.gfkauer.carcontrol.modelo.Fabricante

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

exception

br.com.caelum.vraptor.InterceptionException: exception raised, check root cause for details: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.gfkauer.carcontrol.modelo.Fabricante
	br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:96)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:93)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:51)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
	com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
	com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)


root cause

javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.gfkauer.carcontrol.modelo.Fabricante
	org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1361)
	org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1289)
	org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1295)
	org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:859)
	br.com.gfkauer.carcontrol.dao.impl.ModeloDAOImpl.insert(ModeloDAOImpl.java:22)
	br.com.gfkauer.carcontrol.dao.impl.ModeloDAOImpl.insert(ModeloDAOImpl.java:1)
	br.com.gfkauer.carcontrol.controller.ModeloController.salvar(ModeloController.java:45)
	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)
	br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:93)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:51)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
	com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
	com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)


root cause

org.hibernate.PersistentObjectException: detached entity passed to persist: br.com.gfkauer.carcontrol.modelo.Fabricante
	org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:141)
	org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:717)
	org.hibernate.internal.SessionImpl.persist(SessionImpl.java:710)
	org.hibernate.engine.spi.EJB3CascadingAction$1.cascade(EJB3CascadingAction.java:49)
	org.hibernate.engine.internal.Cascade.cascadeToOne(Cascade.java:380)
	org.hibernate.engine.internal.Cascade.cascadeAssociation(Cascade.java:323)
	org.hibernate.engine.internal.Cascade.cascadeProperty(Cascade.java:208)
	org.hibernate.engine.internal.Cascade.cascade(Cascade.java:165)
	org.hibernate.event.internal.AbstractSaveEventListener.cascadeBeforeSave(AbstractSaveEventListener.java:437)
	org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:266)
	org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:195)
	org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:128)
	org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:78)
	org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208)
	org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151)
	org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78)
	org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:725)
	org.hibernate.internal.SessionImpl.persist(SessionImpl.java:701)
	org.hibernate.internal.SessionImpl.persist(SessionImpl.java:705)
	org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:853)
	br.com.gfkauer.carcontrol.dao.impl.ModeloDAOImpl.insert(ModeloDAOImpl.java:22)
	br.com.gfkauer.carcontrol.dao.impl.ModeloDAOImpl.insert(ModeloDAOImpl.java:1)
	br.com.gfkauer.carcontrol.controller.ModeloController.salvar(ModeloController.java:45)
	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)
	br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:61)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:93)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.util.jpa.JPATransactionInterceptor.intercept(JPATransactionInterceptor.java:51)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:61)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
	br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
	br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
	br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
	br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:91)
	br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
	br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:88)
	com.opensymphony.sitemesh.webapp.SiteMeshFilter.obtainContent(SiteMeshFilter.java:129)
	com.opensymphony.sitemesh.webapp.SiteMeshFilter.doFilter(SiteMeshFilter.java:77)


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


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

Apache Tomcat/7.0.42

[size=18]Podem ignorar Já descobri o meu erro! [/size]
No meu caso o problema estava no relacionamento onde eu tinha um cascate.all