Problemas no jstl "requestScope"

3 respostas
OtIs

Recentemente comprei um livro “Desenvolvendo aplicações com netBeans IDE 6.0” neste livro estou num exemplo onde é criada uma aplicação em DAO passo a passo.
Depois de tudo pronto o código funciona, conexão com o banco e tudo mais, porem uma parte do codigo não funciona de jeito nenhum, referente ao comando “requestScope” em uma pagina jsp que não mostra os dados do banco de dados.
As inserções salvar, atualizar e excluir, funcionam normalmente porem quando é para listar para ver todos os autores “/mostrarAutoresCads.jsp” só mostra o titulo da tabela e nada do que esta dentro do requestScope é mostrado, o codigo esta com as importações corretas e já revisei o codigo varias vezes, inclusive copiado o codigo do proprio exemplo do livro, e nada deste comando funcionar.
O livro se refere ao netbeans 6.0 usando grassfiss v2, porem a versão que estou utilizando é o netbeans 6.8 usando grassfiss v3, será que isto esta influenciando em algo no codigo?

O que poderia estar ocasionando este problema com o comando “requestScope” ou se ouve alguma mudança de utilização do mesmo nestas novas versões?

Agradeceria a quem me ajudasse, pois ja procurei muito (dalhe google) e nada de encontrar algo relacionado e o que encontrava não resolvia.

Colocarei toda a pagina /mostrarAutoresCads.jsp onde o problema ocorre:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<%@page contentType="text/html" pageEncoding="ISO-8859-1"%>
<!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>Trabalhando com DAO e Model 2</title>
    </head>
    <body>
        <table border="1" cellpadding="2" cellspacing="0">
            <tr>
                <th>ID - Atualizar</th>
                <th>Nome</th>
                <th>E-mail</th>
                <th>Nascimento</th>
                <th>Excluir Autor</th>
            </tr>

            //Trecho onde ocorre o problema onde simplesmente não aparece no navegador

            <c:forEach var="lista" items="${requestScope.autoresList}">
                <tr>
                    <td>
                        <a href="ServletAutores?cmd=atu&id=${lista.id}">
                            ${lista.id}
                        </a>
                    </td>
                    <td>${lista.nome}</td>
                    <td>${lista.email}</td>
                    <td><fmt:formatDate value="${lista.nascimento}" type="DATE" pattern="dd/MM/yyyy"/>
                    </td>
                    <td>
                        <a href="ServletAutores?cmd=exc&id=${lista.id}">
                            Excluir
                        </a>
                    </td>
                </tr>
            </c:forEach>

            // fim do trecho com problema

        </table>
        <br />
        <a href="formInserindoDados.jsp">Adicionar um novo Autor</a>
        <br />
        <a href="index.jsp">Página Principal</a>
    </body>
</html>

Trecho do Servlet

...
  try{

            dao = new AutorDAOImp();
            RequestDispatcher rd = null;

            if(cmd.equalsIgnoreCase("listar")) {

                List autoresList = dao.todosAutores();
                request.setAttribute("autoresList",autoresList);
                rd = request.getRequestDispatcher("/mostrarAutoresCads.jsp");

            } ...

Trecho /autorDAOImp.java

...
    public List todosAutores() throws Exception{

        PreparedStatement ps = null;
        Connection conn = null;
        ResultSet rs = null;

        try{

            conn = this.conn;
            ps = conn.prepareStatement("select * from autores");
            rs = ps.executeQuery();
            List<Autor> list = new ArrayList<Autor>();

            while(rs.next()){
                Integer id = rs.getInt(1);
                String nome = rs.getString(2);
                String email = rs.getString(3);
                Date nascimento = rs.getDate(4);

                list.add(new Autor(id,nome,email,nascimento));

            }

            return list;

        } catch (SQLException sqle) {

            throw new Exception(sqle);

        } finally {

            ConnectionFactory.closeConnection(conn,ps,rs);
        }
    } ...

Todo o resto funciona normalmente, com excessão da pagina /mostrarAutoresCads.jsp.

Agradeceria um Help.

3 Respostas

vinicius.martinez

Troque:

<c:forEach var="lista" items="${requestScope.autoresList}">

Por isso:

<c:forEach var="lista" items="${autoresList}">

Ou se quiser forçar

<c:forEach var="lista" items="${autoresList}" scope="request">
OtIs

Olá, desculpe o tempo sem responder, sem net, mas voltando ao assunto

O codigo citado por vinicius nao funcionou, ainda continua sem mostrar a lista dos cadastrados e acrescentando (scope=“request”) ele retorna erro.

será que vou ter que mudar a forma de mostrar este list, é roça o exemplo do livro nao funcionar corretamente…

OtIs

Meu deus, finalmente consegui descobri o que estava acontecendo, o livro não estava errado, mas omitiu uma parte do uso do de como listar os dados, a solução foi simples

Finalmente agora entendi o que estava acontecendo, ao colocar o link anteriormente desta forma:

<a href="mostrarAutoresCads.jsp">Mostrar autores cadastrados</a>

ele não passava os paramentos para o servlet e não mostrava dado algum, mas ele mostrava depois de adicionar utilizando outros adds

então fim o seguinte

Na pagina Index.jsp o link que redireciona para mostrarAutoresCads.jsp funcionou da seguinte forma:

<a href="ServletAutores?cmd=listar">Mostrar autores cadastrados</a>

Depois que a gente descobre ficamos pensando “poxa, era tão Obvio, tinha que listar passando o parametro para o servlet, e não diretamente a página”

Solução resolvida, Flws.

Criado 16 de março de 2010
Ultima resposta 28 de mar. de 2010
Respostas 3
Participantes 2