1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

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>
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags jsp java mysql ou faça a sua própria pergunta.