Erro ao fazer o banco mysql alterar os dados pela jsp [RESOLVIDO]

:? Galera, estou tendo problemas quando vou alterar os dados pela jsp… Quando eu escolho o item q quero alterar ele vai pro controle certinho e joga a jsp com os campos todos, só que quando eu altero algo e aperto alterar dá um erro!!!

Desde já muito grato pela ajuda!!!

[color=red]type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.NumberFormatException: null
java.lang.Integer.parseInt(Unknown Source)
java.lang.Integer.(Unknown Source)
controle.ControleImpressoraAt.doPost(ControleImpressoraAt.java:24)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.30 logs.
[/color]
O código abaixo é o DaoImpressora:

[code]public void update(Impressora i) throws Exception {

	open();

	stmt = con.prepareStatement("UPDATE IMPRESSORA SET " + " NOME=?, MARCA=?, MODELO=?, CONEXAO=? " + " WHERE IDIMPRESSORA=?");

	stmt.setString(1, i.getNome());
	stmt.setString(2, i.getMarca());
	stmt.setString(3, i.getModelo());
	stmt.setString(4, i.getConexao());
	stmt.setInt(5, i.getIdimpressora());
	
	
	stmt.execute();
	stmt.close();
	close();
}

[/code]

O código abaixo é da jsp:

[code]

Cadastro de Impressora




<%@ page import=“entity.*,persistence.ImpressoraDao” %>
<%
String acao = request.getParameter(“action”);
Integer cod = new Integer(request.getParameter(“cod”));
Impressora i = new Impressora();
ImpressoraDao impd = new ImpressoraDao();
i = (Impressora) impd.findById(cod);
    		out.print("<tr>");
        		out.print("<td>Id da impressora no banco: " + "</td>" + "<td> <input name=nome size='20'  readonly value='"+i.getIdimpressora()+"'/></td>");
        	out.print("</tr>");
    		
    		out.print("<tr>");
            	out.print("<td>Nome da Impressora na Intranet: " + "</td>" + "<td> <input name=nome size='20' value='"+i.getNome()+"'/></td>");
            out.print("</tr>");
            
            out.print("<tr>");
        		out.print("<td>Marca da Impressora: " + "</td>" + "<td> <input name=marca size='20' value='"+i.getMarca()+"'/></td>");
        	out.print("</tr>");
        	
        	out.print("<tr>");
    			out.print("<td>Modelo da Impressora: " + "</td>" + "<td> <input name=modelo size='20' value='"+i.getModelo()+"'/></td>");
    		out.print("</tr>");
    		
    		out.print("<tr>");
    		out.print("<td> Conexão da Impressora: " + "</td>" + "<td> <select name=conexao>" + "<option value=''>" + "'" + i.getConexao() + "'" + "</option>" + "<option value=USB> USB </option>" + "<option value=Rede> Rede </option>" + "</select>" + "</td>" + "</tr>");%>
            
            <tr>
            	<td> <br/> <input id="botao" type="button" value="Alterar Impressora" onclick="validaImpressora()"/> </td>
                <td> <br/> <input id="botao" type="reset" value="Limpar"/> </td>
            </tr>
            <tr>
                <td colspan="2"> <br/> <el> ${mensagem} </el> </td>
            </tr>
      
        </table>[/code]

Esse aqui é o metodo que coloquei na própria jsp pra filtrar erros de campos como colocar poucas letras nos campos. Depois de passado por esse método aí sim ele vai pro controle:

[code]

function validaImpressora()
{
	f = document.form2;
	
	if (f.nome.value.length < 3){
		alert("O campo 'NOME' deve conter pelo menos 3 caracteres");
		f.nome.focus();
	} else if(f.marca.value.length < 2){
		alert("O campo 'MARCA' deve conter pelo menos 2 caracteres");
		f.marca.focus();
	} else if(f.modelo.value.length < 2){
		alert("O campo 'MODELO' deve conter pelo menos 2 caracteres");
		f.modelo.focus();
	} else if(f.conexao.value.length == ""){
		alert("Selecione o tipo de conexão para a impressora");
		f.conexao.focus();
	} else{
		f.submit();
	}
}

</script>[/code]

Esse é do controle:

[code]protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Impressora i = new Impressora(new Integer(request.getParameter(“idimpressora”)), request.getParameter(“nome”), request.getParameter(“marca”),
request.getParameter(“modelo”),
request.getParameter(“conexao”)
);
try{
ImpressoraDao impd = new ImpressoraDao();
impd.update(i);
request.setAttribute(“mensagem”,“Dados Alterados”);

}catch(Exception e){
request.setAttribute(“mensagem”,e.getMessage());
}

request.getRequestDispatcher(“cadastroimpressora.jsp”).
forward(request,response);
}[/code]

Parece que o erro é aqui:

Impressora i = new Impressora(new Integer(request.getParameter("idimpressora")),

Cria uma variável e faz a conversão de string para int.

int idImpressora= Integer.parseInt(request.getParameter("idimpressora"));

Romarcio, mas lá na classe impressora, eu declarei o idimpressora como integer, logo não consigo fazer o parse que vc disse acima, pois seria como fazê-lo de Integer para Integer.
O estranho é que todas as funcionalidades de deletar, incluir estão funcionando só o alterar que está dando erro.

Cara esse request.getParameter(“idimpressora”)
ta retornando null por isso o erro de NumberFormatException: null

Acho que o problema está na linha 13 do jsp, note que o atributo name esta como “nome”
e vc repete isso na linha 17, acho q na linha 13 vc deveria trocar
de:

out.print("<td>Id da impressora no banco: " + "</td>" + "<td> <input name=nome size='20'  readonly value='"+i.getIdimpressora()+"'/></td>");

para

out.print("<td>Id da impressora no banco: " + "</td>" + "<td> <input name=idimpressora  readonly value='"+i.getIdimpressora()+"'/></td>");

Jokacwb, eu ia colocar esse assunto como resolvido, pois tinha descoberto o problema e era esse mesmo, como eu tinha copiado a linha do nome para fazer o do id eu esqueci de trocar por id… Mas mesmo assim muito obrigado pela resposta… fica com Deus e sucesso!!!

Ahhh e obrigado tbm para o Romarcio.