Versão atual:

Listar dados de tabelas diferentes com JSTL/Java usando <c:forEach>

Pesquisei em vários lugares e não achei oque queria. Preciso listar atributos de tabelas diferentes através de um formulário JSP usando JSTL. Ele precisa cadastrar os atributos do formulário que pertence a várias tabelas e depois listar.Está cadastrando no baco pq conferi, mas quando vai listar no JSP não pega os atributos.

Esse é meu formulário que faz o cadastro cadastro.jsp

<div id="main" class="container-fluid">
    <h3 class="page-header">Cadastrar Monografia</h3>
    <form action="mvc">
        <input type="hidden" name="logica" value="GravaMonografiaLogic">
        <input type="hidden" name="idMonografia" value="${monografia.idMonografia}">
        <!-- area de campos do form -->
        <div class="row">
            <div class="form-group col-md-4">
                <label for="aluno">Aluno</label> <input type="text" name="aluno"
                    class="form-control" id="aluno" value="${monografia.getAluno().getNome()}">
            </div>

            <div class="form-group col-md-4">
                <label for="orientador">Orientador</label> <input type="text" name="orientador"
                    class="form-control" id="orientador" value="${monografia.getProfessor().getNome()}">
            </div>

            <!-- <div class="form-group col-md-4">
                <label for="coorientador">Co-Orientador</label> <input type="text" name="coorientador"
                    class="form-control" id="coorientador" value="${aluno.professor}">
            </div>
        </div>-->
        <div class="row">
            <div class="form-group col-md-4">
                <label for="titulo">Título</label> <input type="text" name="titulo" class="form-control" id="titulo" value="${monografia.titulo}">
         </div>
        <hr />
        <div id="actions" class="row">
            <div class="col-md-12">
                <button type="submit" class="btn btn-primary">Salvar</button>
                <a href="mvc?logica=ListaMonografiaLogic" class="btn btn-default">Cancelar</a>
            </div>
        </div>


    </form>
</div>

Esse é minha classe com o método public List getLista() que faz o SELECT

public class MonografiaDao {

//Conexão com o banco
private Connection connection;

public MonografiaDao(){
    this.connection = new ConnectionFactory().getConnection();

//Método Listar
public List<Monografia> getLista() throws SQLException{
    PreparedStatement stmt = this.connection.prepareStatement("select * from monografia inner join professor on professor_idProfessor = idProfessor inner join aluno on aluno_idAluno = idAluno ");
    ResultSet rs = stmt.executeQuery();
    List<Monografia> monografias = new ArrayList<Monografia>();
    while(rs.next()){
        //criando o objeto monografia
        Monografia monografia = new Monografia();


        monografia.setIdMonografia(rs.getInt("idMonografia"));
        monografia.setTitulo(rs.getString("titulo"));
        monografia.setAluno(rs.getString("nome"));

        /*Aluno aluno = new Aluno();
        aluno.setIdAluno(rs.getInt("idAluno"));
        aluno.setNome(rs.getString("nome"));

        Professor professor = new Professor();
        professor.setIdProfessor(rs.getInt("idProfessor"));
        professor.setNome(rs.getString("nome"));*/


        //adicionando o objeto na lista
        monografias.add(monografia);


    }
    rs.close();
    stmt.close();
    return monografias;
}

Depois de cadastrar ele passa por essa lógica GravaMonografiaLogic

package br.com.daniel.mvc.logica;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.daniel.sistemamono.dao.MonografiaDao;
import br.com.daniel.sistemamono.modelo.Aluno;
import br.com.daniel.sistemamono.modelo.BancaDefesa;
import br.com.daniel.sistemamono.modelo.Monografia;
import br.com.daniel.sistemamono.modelo.Professor;

public class GravaMonografiaLogic implements Logica {

@Override
public String executa(HttpServletRequest req, HttpServletResponse res) throws Exception{

    int idMonografia = 0;
    int idProfessor = 0;
    int idAluno = 0;


    if(req.getParameterMap().containsKey("idMonografia") && !req.getParameter("idMonografia").isEmpty())
        idMonografia = Integer.parseInt(req.getParameter("idMonografia"));



    String titulo = req.getParameter("titulo");
    Monografia monografia = new Monografia();
    monografia.setIdMonografia(idMonografia);
    monografia.setTitulo(titulo);

    String orientador = req.getParameter("orientador");
    Professor professor = new Professor();
    professor.setIdProfessor(idProfessor);
    professor.setNome(orientador);

    String nomeAluno = req.getParameter("aluno");
    Aluno aluno = new Aluno();
    aluno.setIdAluno(idAluno);
    aluno.setNome(nomeAluno);

    BancaDefesa bancaDefesa = new BancaDefesa();


    //salva a monografia
    MonografiaDao dao;
    try{
        dao = new MonografiaDao();
        if(monografia.getIdMonografia()==0)
            dao.adiciona(monografia, aluno, professor, bancaDefesa);
        else
            dao.altera(monografia);
    }catch (Exception e) {
        e.printStackTrace();
    }
    return "mvc?logica=ListaMonografiaLogic";
}

Depois passa pela lógica ListaMonografiaLogic

package br.com.daniel.mvc.logica;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.daniel.sistemamono.dao.*;
import br.com.daniel.sistemamono.modelo.*;


public class ListaMonografiaLogic implements Logica {

@Override
public String executa(HttpServletRequest req, HttpServletResponse res) throws Exception{
    // Monta a lista de contatos
    List<Monografia> monografias = new MonografiaDao().getLista();
    // Guarda a lista no request
    req.setAttribute("monografias", monografias);
    return "/WEB-INF/jsp/monografia/listaMonografias.jsp";
}

E por fim faz a listagem nessa página JSP listaMonografias.jsp Acredito que o problema maior esteja nesse jsp, no laço <:cforEach>, pois preciso buscar em mais de uma tabela para fazer a listagem.

<div id="list" class="row">

        <div class="table-responsive col-md-12">
            <table class="table table-striped" cellspacing="0" cellpadding="0">
                <thead>
                    <tr>
                        <th>ID</th>
                        <th>Título</th>
                        <th>Aluno</th>
                        <th>Orientador</th>
                        <th class="actions">Ações</th>
                    </tr>
                </thead>
                <tbody>
                    <!-- Percorre monografias montando as linhas da tabela -->
                    <c:forEach var="monografia"  items="${monografias}" >
                    <tr>
                        <td>${monografia.idMonografia}</td>
                        <td>${monografia.titulo}</td>
                        <td>${monografia.getAluno().getNome()}</td>
                        <td>${monografia.getProfessor().gettome()}</td>
                        <td class="actions"><a class="btn btn-success btn-xs"
                            href="view.html">Visualizar</a> <a
                            class="btn btn-warning btn-xs" href="mvc?logica=MonografiaLogic&idMonografia=${monografia.getIdMonografia()}">Alterar</a> <a
                            class="btn btn-danger btn-xs" href="mvc?logica=RemoveMonografiaLogic&idMonografia=${monografia.getIdMonografia()}" data-toggle="modal"
                            data-target="#delete-modal">Excluir</a></td>
                    </tr>
                    </c:forEach>
                </tbody>

            </table>

        </div>

Versões(2):

Ver a versão formatada

Listar dados de tabelas diferentes com JSTL/Java usando

Comentário

new question