Problema com JSP sem servlet

1 resposta
bacoco

Seguinte tenho algumas telas e toda estou tendo os mesmos problemas,tenho 2 grupos de CRUD diferentes e sempre que faço algum cadastro ele está sempre inserindo no banco como se eu tivese executado os campos todos vazios ou em branco,é como se ele executa-se a query antes de eu clicar no botão...

Abaixo está o codigo,pode perceber que não estou usando servlet sempre crio a conexão em cada arquivo .jsp quando vou usa-la e executo a query que desejo e assim vai...

ps:Ignore o fato de todos os campos estarem em string isso vai ser acertado mais para frente.

<%@ page import="java.util.*"%>   
<%@ page import="java.sql.*" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    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>Cadastro Condutor</title>
<h1>Cadastro dos condutores de uma empresa </h1>
</head>
<body background="images/background1.jpg">
<form method = "post">
	<table border ="2"  cellpadding ="1" cellspacing= "1">
		<tr height= "50%">
			<td>
			<Table border = "1">
					<tr>
						<td colspan ="2">				
							CNPJ(Empresa deve estar pré-cadastrada): <input type ="text" size="20" name ="cnpj" maxlength="20">
						</td>
						<td colspan ="2">				
							CPF do Condutor:<input type ="text" size="20" name ="cpf" maxlength="20">
						</td>							
					</tr>
						
					<tr>
						<td colspan ="2">
								Condutor : <input type ="text" name ="condutor" size="40">
						</td>														

						<td align ="center" colspan  ="2">
							Tipo de Habilitação:
							<select name="carta">
											<option value="A">A</option>
											<option value="B">B</option>
											<option value="C">C</option>
											<option value="D">D</option>
											<option value="E">E</option>
											</select>
						<td colspan ="1" align ="center">
								Numero da Habilitação:
								<input type ="text" name ="nhab" size="21">										
						</td>	

					</tr>
			</Table>
			</td>
		</tr>
	</table>
	<br> 
	Deseja receber informações sobre nossas promoções no seu email?<br> Sim<input type="radio" name="status" Value="S">
																		Não<input type="radio" name="status" Value="N">
								<br>
								<br>
	
	
	<input type ="reset" name = "Reset"  value ="Apagar">
	<input type ="button" name ="Voltar" value ="Voltar" Onclick = "window.location ='Homepage.jsp';">
	<input type ="submit" name = "Submit" value = "Concluir">
	<%
		String cnpj = request.getParameter("cnpj");
		String condutor = request.getParameter("condutor");
		String carta =request.getParameter("tipo");
		String numerohab = request.getParameter("numerohabi");
		String cpf = request.getParameter("cpf");
		
		
		Connection con = null;  
	 	Statement st = null;  
	 	ResultSet res = null;
	 	
	 	try  
		   {     Class.forName("org.postgresql.Driver");  
		        con = DriverManager.getConnection  
		        ("jdbc:postgresql://localhost:5432/postgres","postgres","aluno");  
		        st = con.createStatement();  
		     
		      ResultSet rs=st.executeQuery("insert into condutores(cpf,cnpj,condutor,carta,numerohab)"+
		      "values"+ 

		      "('"+cpf+"','"+cnpj+"','"+condutor+"','"+carta+"','"+numerohab+"')"
		     
		    		  );  
		     
		     
		   out.println("Condutor inserido com sucesso");
		     
		        con.close();  
		   }  
		   catch (ClassNotFoundException cnfex)  
		   {    out.println("Falha ao carregar o driver");  
		   }  
		   catch (SQLException sqlex)  
		   {    //out.println("Erro "+sqlex);  
		   }
				
	
	%>
	
</form>
</body>
</html>

1 Resposta

J

Amigo o problema do seu código é que não há nenhuma condição (clicar no botão) para executar o comando.

É preciso fazer um if, por exemplo:
<input type ="submit" name = "Submit" value = "Concluir">  
    <%  

if (request.getParameter("Submit") != null && request.getParameter("Submit").equals("Concluir")) {
        String cnpj = request.getParameter("cnpj");  
        String condutor = request.getParameter("condutor");  
        String carta =request.getParameter("tipo");  
        String numerohab = request.getParameter("numerohabi");  
        String cpf = request.getParameter("cpf");  
          
          
        Connection con = null;    
        Statement st = null;    
        ResultSet res = null;  
          
        try    
           {     Class.forName("org.postgresql.Driver");    
                con = DriverManager.getConnection    
                ("jdbc:postgresql://localhost:5432/postgres","postgres","aluno");    
                st = con.createStatement();    
               
              ResultSet rs=st.executeQuery("insert into condutores(cpf,cnpj,condutor,carta,numerohab)"+  
              "values"+   
  
              "('"+cpf+"','"+cnpj+"','"+condutor+"','"+carta+"','"+numerohab+"')"  
               
                      );    
               
               
           out.println("Condutor inserido com sucesso");  
               
                con.close();    
           }    
           catch (ClassNotFoundException cnfex)    
           {    out.println("Falha ao carregar o driver");    
           }    
           catch (SQLException sqlex)    
           {    //out.println("Erro "+sqlex);    
           }  
          }        
      
    %>

Mesmo assim acho melhor reavaliar a forma de implementação. Não é nada legal deixar a conexão nas páginas JSPs e nem mesmo tratar o fluxo da aplicação (Controller) nas próprias páginas.

Nem que seja para usar servlet junto com jsp e deixar a parte de fluxo no servlet é melhor do que fazer desta forma!

Criado 17 de maio de 2012
Ultima resposta 18 de mai. de 2012
Respostas 1
Participantes 2