Boa tarde galera do GUJ.
Em várias consultas no fórum para resolver meu problema, infelizmente não consegui encontrar uma mais próxima do meu. E parece que é um problema um tanto quanto comum entre os usuários.
Isso pode ser porque em meio a infinidade de frameworks e tecnologias, é muito difícil encontrar alguém que esteja fazendo com os mesmos recursos que você tenha em mãos.
Mas vamos lá!
O problema é o velho cadastro de Estado e Cidade.
Como posso resolver de acordo com o código que já tenho logo abaixo, para que ao escolher o País, venham somente os Estados a ele relacionados?
Lembrando que o CRUD está funcionando. Só está faltando algumas melhorias como essa citada
CidadeDAO
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.Cidade;
@Component
public class CidadeDAO {
private final Session session;
public CidadeDAO(){
this.session = CriaSession.getSession();
}
public void adiciona(Cidade cidade){
Transaction transaction = session.beginTransaction();
session.save(cidade);
transaction.commit();
}
public void altera(Cidade cidade){
Transaction transaction = session.beginTransaction();
session.update(cidade);
transaction.commit();
}
public void remove(Cidade cidade){
Transaction transaction = session.beginTransaction();
session.delete(cidade);
transaction.commit();
}
public Cidade carrega(Long codigo){
return (Cidade) this.session.load(Cidade.class, codigo);
}
@SuppressWarnings("unchecked")
public List<Cidade> listaCidade(){
return session.createCriteria(Cidade.class).list();
}
}
CidadeController
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.Cidade;
import br.com.offline.local.Estado;
import br.com.offline.local.Pais;
import br.com.offline.local.dao.CidadeDAO;
import br.com.offline.local.dao.EstadoDAO;
import br.com.offline.local.dao.PaisDAO;
@Resource
public class CidadeController {
private final CidadeDAO dao;
private final Result result;
private final EstadoDAO estadoDAO;
private final PaisDAO paisDAO;
public void novaCidade(){
List<Pais> pais = paisDAO.listaPais();
List<Estado> estados = estadoDAO.listaEstado();
result.include("estados", estados);
result.include("pais", pais);
}
public CidadeController(CidadeDAO dao, Result result, PaisDAO paisDAO, EstadoDAO estadoDAO){
this.dao = dao;
this.result = result;
this.paisDAO = paisDAO;
this.estadoDAO = estadoDAO;
}
// Métodos dao.
public void adiciona(Cidade cidade){
dao.adiciona(cidade);
result.redirectTo(CidadeController.class).cidadeAdicionada();
}
public Cidade alteraCidade(Long codigo){
List<Pais> pais = paisDAO.listaPais();
List<Estado> estados = estadoDAO.listaEstado();
result.include("pais", pais);
result.include("estados", estados);
return dao.carrega(codigo);
}
public void altera(Cidade cidade){
dao.altera(cidade);
result.redirectTo(this).listaCidade();
}
public void remove(Long codigo){
Cidade cidade = dao.carrega(codigo);
dao.remove(cidade);
result.redirectTo(this).listaCidade();
}
public List<Cidade> listaCidade() {
return dao.listaCidade();
}
public String cidadeAdicionada(){
return "/cidade/cidadeAdicionada.jsp";
}
}
novaCidade.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"%>
<!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>
<style type="text/css"></style>
</head>
<body>
<div id="corpo">
<h3>Adicionando uma nova Cidade.</h3>
<form action="adiciona" method="post" name="novaCidade">
<fieldset>
<legend>Adicionar Cidade</legend>
<input id="codigo" type="hidden" name="cidade.codigo" />
<br />
<label for="nome">Nome:</label>
<input id="nome" type="text" name="cidade.nome" />
<br />
<label for="sigla">Sigla:</label>
<input id="sigla" type="text" name="cidade.sigla" maxlength="3" />
<br />
<label for="pais"> País:</label>
<select id="pais" name="pais.codigo" onchange="buscaEstado()">
<option>Selecione</option>
<c:forEach items="${pais }" var="pais">
<option id="pais" value="${pais.codigo }"> ${pais.nome }</option>
</c:forEach>
</select>
<br />
<label for="estado"> Estado:</label>
<select id="estado" name="cidade.estado.codigo">
<option id="estado">Selecione</option>
<c:forEach items="${estados }" var="estado">
<option id="estado" value="${estado.codigo }"> ${estado.nome }</option>
</c:forEach>
</select>
<br />
<button type="submit">Enviar</button>
</fieldset>
</form>
<br />
</div>
</body>
</html>
Desde já agradeço a todos.