[RESOLVIDO] Ajuda com parametro

Oi pessoal, preciso de uma ajuda. Fiz um servlet que grava no banco um cod_pedido, e vai para outra página, passando este parametro. Mas quando tento pegar este parametro na página ele aparece null, ser que alguém pode me ajudar? aqui vai o trecho do servlet e lgo abaixo a página:

 ps_cliente.execute();

            System.out.println("Pronto, Pedido incluido com sucesso!");
            request.setAttribute("cod_pedido", cod_pedido); // aqui eu seto o atributo cod_pedido, mas não consigo pega-lo na página

//            getServletContext().getRequestDispatcher("/pedidos_itens_incluir.jsp").forward(request, response);
            response.sendRedirect("pedidos_itens_incluir.jsp");

            ps_cliente.close();
            conn_cliente.close();
            rs_cliente.close();

Aqui está o trecho de códgo da página:

<!-- Sql de consulta de um pedido-->
        <sql:query var="pedido_consulta" dataSource="${lojacel}">
            select * from lojacel.pedidos where cod_pedido =?;
            <sql:param value = "${cod_pedido}" />  <!--Aqui este parametro aparece como null. O que tem de errado? -->
        </sql:query>
        
        <c:set var="cod_pedido" value="${cod_pedido}"/>

nossa, servlet, dá até arrepio de lembrar da época que tinha que mexer diretamente com isso até conhecer os frameworks, o bom é que vc tem uma idéia do que acontece dentro do framework, mas vamos lá.

Depois do seu comando

request.setAttribute("cod_pedido", cod_pedido);

faz isso e vê o que acontece

System.out.println(request.getParameter("cod_pedido"));

Se nada for impresso, sinal que “cod_pedido” está vazio, ou seja, o problema pode ser outro e não na página jsp.

Uma dica, dê uma olhada em padrões de projetos, tipo, separar o sql das suas páginas jsp, criar uma estrutura básica usando 3 camadas seria interessante.

Apresentação -> Os JSP´

Controle -> Servlet (Aqui no futuro vc irá usar um framework MVC, aconselho o VRaptor)
Instancia a dao e usa os métodos de acesos ao banco

Dao -> PedidoDao
Conexão com banco, comandos sql encapsulados em métodos de acesso, tipo pedidoDao.salvar(), pedidoDao.excluir() e outros.

Está não é nem de perto a estrutura mais indicada, mas num primeiro momento vai ser o maior passo que vc irá dar.

Qualquer dúvida, posta ai…

[]'s

Opa, obrgado por responder meu amigo. Vc está certo sobre o framework e padrões de projeto, mas estou começando então por enquanto tenho que passar por essa fase do servlet mesmo para poder progredir. Mas quanto ao problema, eu depurei a aplicação pra ver o que está acontecendo … e ele mostra o código certinho sem problemas…acontece que o código existe enquanto está dentro do servlet, quando ele vai para a outra página, ele some. Uso o netbeans 6.5, e coloquei o cod_pedido como um novo observador … e quando ele saiu do servlet para a página o valor dele que era 56 virou null é isso que eu não entendi. Então a pergunta que eu faço é, existe mais algum meio de setar um atributo de um servlet para uma página sem mandar com setAttribute e sem receber com getAttribute na jsp, ou cmo eu fiz unsando EL ?

Fiz o teste que vc me recomendou … e o valor é null … o que será que deu errado …?

de onde vem “cod_pedido”?

posta o código completo do servlet, ficará mais fácil

Ok, lá vai ele:


import java.io.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import javax.servlet.*;
import javax.servlet.http.*;

public class pedidos_incluir extends HttpServlet {

    private PreparedStatement ps_cliente;
    private ResultSet rs_cliente;
    private Connection conn_cliente;
    String cod_pedido, pagina, item;

    public void consultar_pedido(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        pagina = request.getParameter("pagina");
        cod_pedido = "";

        try {

            Class.forName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
            conn_cliente = DriverManager.getConnection("jdbc:mysql://localhost:3306/lojacel", "root", "");
            ps_cliente = conn_cliente.prepareStatement("select max(cod_pedido) IDENTITY from lojacel.pedidos as cod_pedido;");
            rs_cliente = ps_cliente.executeQuery();

            if (rs_cliente.next()) {
                cod_pedido = rs_cliente.getString(1);
                request.setAttribute("cod_pedido", cod_pedido);
                System.out.println("Concluido, cod_pedido maximo encontrado! " + cod_pedido);

            } else {

                System.out.println("Erro ao buscar o max(cod_pedido)!");
            }

//            rs_cliente.close();
//            ps_cliente.close();
//            conn_cliente.close();

        } catch (Exception e) {
            String erro = e.getMessage();
            System.out.println("Erro: " + e.toString());
            System.out.println("Erro: " + erro);
            e.printStackTrace();

        }

    }

    public void incluir_pedido(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        int count = Integer.parseInt(cod_pedido);
        count++;
        cod_pedido = String.valueOf(count);

        String cod_cliente = request.getParameter("cod_cliente");
        String valor_total = request.getParameter("valor_total");
        String forma_pagamento = request.getParameter("forma_pagamento");
        String observacoes = request.getParameter("observacoes");
        String desconto = request.getParameter("desconto");
        String cod_vendedor = request.getParameter("cod_vendedor");
        String situacao = request.getParameter("situacao");
        String data = request.getParameter("data");
        String tipo_desc = request.getParameter("tipo_desc");
        String prazo = request.getParameter("prazo");
        String num_pedido = request.getParameter("num_pedido");


        try {

            Class.forName("com.mysql.jdbc.jdbc2.optional.MysqlDataSource");
            conn_cliente = DriverManager.getConnection("jdbc:mysql://localhost:3306/lojacel", "root", "");
            ps_cliente = conn_cliente.prepareStatement("insert into lojacel.pedidos (cod_pedido, cod_cliente, " +
                    "valor_total, forma_pagamento, observacoes, desconto, cod_vendedor, situacao,data, " +
                    "tipo_desc, prazo, num_pedido) values (?, ?, ?, ?, ?, " +
                    "?, ?, ?, ?, ?, ?, ?);");

            ps_cliente.setString(1, cod_pedido);
            ps_cliente.setString(2, cod_cliente);
            ps_cliente.setString(3, valor_total);
            ps_cliente.setString(4, forma_pagamento);
            ps_cliente.setString(5, observacoes);
            ps_cliente.setString(6, desconto);
            ps_cliente.setString(7, cod_vendedor);
            ps_cliente.setString(8, situacao);
            ps_cliente.setString(9, data);
            ps_cliente.setString(10, tipo_desc);
            ps_cliente.setString(11, prazo);
            ps_cliente.setString(12, num_pedido);

            ps_cliente.execute();

            System.out.println("Pronto, Pedido incluido com sucesso!");
            request.setAttribute("cod_pedido", cod_pedido);
            System.out.println(request.getParameter("cod_pedido"));  // Á partir daqui  ele  está aparecendo como null, antes aparecia como 60 ... e ele é gerado mais acima
            response.sendRedirect("pedidos_itens_incluir.jsp");

            ps_cliente.close();
            conn_cliente.close();
            rs_cliente.close();
            
        } catch (Exception e) {
            String erro = e.getMessage();
            System.out.println("Erro: " + e.toString());
            System.out.println("Erro: " + erro);
            e.printStackTrace();
            System.out.println("Erro, ao tentar incluir pedido!");
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.println("<html>");
            out.println("<head>");
            out.println("<title> Erro, ao tentar incluir pedido! </title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<center>");
            out.println("Erro: <b>" + e + "</b> ao tentar incluir pedido!");
            out.println("&lt;/center&gt;");
            out.println("&lt;/body&gt;");
            out.println("&lt;/html&gt;");

        }

    }

   

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        consultar_pedido(request, response);
        incluir_pedido(request, response);
      
       

    }
}

Pessoal resolvi o problema utilizando:

getServletContext().getRequestDispatcher("/pedidos_itens_incluir.jsp").forward(request, response); ao invés de:

response.sendRedirect("pedidos_itens_incluir.jsp");

Obrigado a todos.