Problema para passar variáveis de uma página JSP para outra

4 respostas
I

Hoje mais cedo postei uma dúvida sobre fazer pesquisa com parâmetros usando jdbc.

Agora o problema é outro, para que o parâmetro (chave primária da tabela) seja utilizado eu preciso inicializar ele em uma página, através de um campo “text” em um formulário.
Logo depois preciso recuperar o valor desse campo em uma outra página, página essa que deverá mostrar esse valor junto com todos os outros dados em uma tabela.

Por enquanto o código das páginas estão assim:

listar_perfis.jsp

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <form method="POST" action="listar_perfis2.jsp">
            <input type="text" name="idPerfil">
            <input type="submit" value="Enviar">
        </form>
    </body>
</html>

listar_perfis2.jsp

<%@page import="modelo.Perfil"%>
<%@page import="java.util.ArrayList"%>
<%@page import="modelo.PerfilDAO"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Lista de Perfis</h1>
        
        <br>
        <h1 align="center">Lista de perfis <a href="form_cadastrar_perfil.jsp">(Novo)</a></h1>
        <br>
        <table border="1" align="center" width="60%">
            <tr>
                <td>
                     ID
                </td>
                <td>
                     Perfil
                </td>
                <td>
                     Alterar
                </td>
                <td>
                     Excluir
                </td>
            </tr>
            <%
                try{
                    PerfilDAO pDB = new PerfilDAO();
                    ArrayList<Perfil> lista;
                    pDB.conectar();
                    lista = pDB.listar2(Perfil p);
                    for (Perfil p:lista){

            %>
                        <tr>
                            <td>
                                <%=p.getIdPerfil() %>
                            </td>
                            <td>
                                <%=p.getNomePerfil() %>
                            </td>
                            <td>
                                <a href="form_alterar_perfil.jsp?idPerfil=<%=p.getIdPerfil() %>">Alterar</a>
                            </td>
                            <td>
                                <a href="excluir_perfil.do?idPerfil=<%=p.getIdPerfil() %>">Excluir</a>
                            </td>
                        </tr>
            <%
                    }
                    pDB.desconectar();
                }
                catch (Exception erro){
                    out.print (erro);
                }
            %>
        </table>
        
    </body>
</html>

PerfilDAO

public Perfil listar2(Perfil p) throws Exception {
        String sql = "SELECT * FROM perfil WHERE idPerfil=?";
        PreparedStatement pst;
        ResultSet rs;
        pst = conn.prepareStatement(sql);
        rs = pst.executeQuery();

        if (rs.next()) {
            p.setIdPerfil(rs.getInt("idPerfil"));
            p.setNomePerfil(rs.getString("nomePerfil"));
        }
        return p;
    }

PS: Em listar_perfis2.jsp. O Netbeans acusa um erro na linha 37, alguém pode me dizer o porque?

4 Respostas

S

errado,você não deve passar o valor de uma jsp para outra jsp,você deve passar o valor de uma jsp para um servlet,e no servlet utilizar todo o codigo necessario em java :smiley:
procure aprender sobre servlets…

I

Eu já utilizo servlets, porém utilizo apenas para Inserção e Exclusão de dados. Como posso utilizar um servlet para fazer pesquisas com parâmetros?

S
protected void processRequest(HttpServletRequest request , HttpServletResponse response) throws ServletException , IOException{
		
		
		try{
			
			Produto produto = new Produto();
			ProdutoDAOImpl dao = new ProdutoDAOImpl();
			
			int id = Integer.parseInt(request.getParameter("id"));
			produto.setId(id);
			
			produto = dao.obter(produto);
			//obtive produto
                        
                        //adiciono o produto no request
			request.setAttribute("id", produto.getId());
			request.setAttribute("nome", produto.getNome());
			request.setAttribute("descricao", produto.getDescricao());
			request.setAttribute("fabricante", produto.getFabricante());
			request.setAttribute("preco", produto.getValor());
			request.setAttribute("categoria", produto.getCategoria());
			request.setAttribute("unidade", produto.getUnidade());
			
			//passo as caracteristicas obtidas do produto para  a pagina altera-produto.jsp
				RequestDispatcher rs = request.getRequestDispatcher("alterar-produto.jsp");
				rs.forward(request,response );
				
			
			
		}catch(Exception e){
			e.printStackTrace();
		}
	}
na jsp
//Peguei o id do produto que foi passado pelo request 
${requestScope.id} 
//peguei o nome
${requestScope.nome}
//e vou pegar todos os outros valores que passei pelo request
${requestScope.descricao}
${requestScope.fabricante}
${requestScope.preco}
${requestScope.categoria}
${requestScope.unidade}

Evite fazer codigos de programação em jsp,para isso que serve os servlets :D
E outra coisa,vi que seu codigo tem scriptlet,esqueça scriptlet,se o seu professor está ensinando em scriptlet,tente dar uma esudada em jstl
atualmente não se usa mais scriptlets

D

Coloque os dados recebidos na sessão do seu HttpServletRequest , como o slow17 lhe mostrou e na jsp pegue o valor pelo id que setou na classe.

Usar scriptlets deixa a jsp suja e não é uma boa pratica.

Abs

Criado 19 de outubro de 2013
Ultima resposta 22 de out. de 2013
Respostas 4
Participantes 3