Estou com um probleminha. Tenho uma tabela no banco de alunos. Criei minha servlet de nome “RemoveAlunoServlet”. Criei o mapeamento no Web.xml com a url-pattern “/removeAluno”, só que minha grande dúvida está na minha “lista-alunos.jsp”. Estou querendo chamar a minha servlet de remoção através de um link chamado de “Remover”. Fiz só que não consegui fazer da forma correta e não está removendo ao clicar no link. E quando clico no link cai no erro HTTP 500 com a seguinte mensagem de erro:
[b]type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
Em servlet.RemoveAlunoServlet.service(RemoveAlunoServlet.java:26)
Você tentou remover um aluno cujo id era “” e não um Long. Deu erro de cast.
Veja se todos os objetos retornados por ${dao.lista} possuem ids válidos.
Ids que não podem ser convertidos em longs não são válidos (ex: null, “abc12”, “”).
T
tiagofla
O servlet está da seguinte forma:
public class RemoveAlunoServlet extends HttpServlet{
protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException{
Aluno aluno = new Aluno();
long id = Long.parseLong(req.getParameter("id"));
aluno.setId(id);
AlunoDAO dao = new AlunoDAO();
dao.remove(aluno);
res.sendRedirect("lista-alunos.jsp");
}
T
tiagofla
Se eu colocar o id do aluno, remove numa boa.
Ex: Se eu colocar la na barra de endereço do browser assim
O problema está no seu link.
${aluno.id} está retornando “” ao invés de um id válido.
T
tiagofla
Sim…é justamente no link. Tanto é que que ta dando aquela exception input string = “”. Daquele HTTP 500 mencionado no início. Aquela EL (${aluno.id}), não está pegando um id válido…
F
fvslistas
Se a sintaxe do link estiver correta e tudo o mais, o q sobra é q o erro poderia estar em quem alimenta este link.
E este seria o ${dao.lista}.
Posta aí o código dele.
pintofree
Cara, qnd for postar codigo usa a Tag COde que tem em cima do editor de texto. “codigo aki”
Seguinte. posta a sua classe AlunoDAO pra gente ver o que pode estar errado.
T
tiagofla
Esses são os 2 métodos da classe AlunoDAO no qual estou trabalhando no momento:
publicList<Aluno>getLista(){try{List<Aluno>alunos=newArrayList<Aluno>();PreparedStatementstmt=this.connection.prepareStatement("select * from tb_aluno");ResultSetrs=stmt.executeQuery();while(rs.next()){Alunoaluno=newAluno();aluno.setNome(rs.getString("nome"));aluno.setCpf(rs.getString("cpf"));aluno.setTelefone(rs.getString("telefone"));aluno.setEndereco(rs.getString("endereco"));aluno.setBairro(rs.getString("bairro"));aluno.setCidade(rs.getString("cidade"));aluno.setUf(rs.getString("estado"));alunos.add(aluno);}rs.close();stmt.close();returnalunos;}catch(SQLExceptione){thrownewRuntimeException(e);}}publicvoidremove(Alunoaluno){Stringsql="delete from tb_aluno where id=? ";try{PreparedStatementstmt=this.connection.prepareStatement(sql);stmt.setLong(1,aluno.getId());stmt.execute();}catch(SQLExceptione){thrownewRuntimeException();}}
cadê o aluno.setId(…) ?
Por isso nada é exibido no seu link.
Outra coisa, seu “id” é mesmo um long ou uma String? Verifique isto tb.
Vai fazer diferença na linha 33 e onde mais getId e setId forem chamados.
T
tiagofla
O id é do tipo Long.
T
tiagofla
Fiz as alterações sugeridas...minha classe AlunoDAO ficou da seguinte forma:
publicList<Aluno>getLista(){try{List<Aluno>alunos=newArrayList<Aluno>();PreparedStatementstmt=this.connection.prepareStatement("select * from tb_aluno");ResultSetrs=stmt.executeQuery();while(rs.next()){Alunoaluno=newAluno();aluno.setId(rs.getLong("id"));aluno.setNome(rs.getString("nome"));aluno.setCpf(rs.getString("cpf"));aluno.setTelefone(rs.getString("telefone"));aluno.setEndereco(rs.getString("endereco"));aluno.setBairro(rs.getString("bairro"));aluno.setCidade(rs.getString("cidade"));aluno.setUf(rs.getString("estado"));alunos.add(aluno);}rs.close();stmt.close();returnalunos;}catch(SQLExceptione){thrownewRuntimeException(e);}}publicvoidremove(Alunoaluno){Stringsql="delete from tb_aluno where id=? ";try{PreparedStatementstmt=this.connection.prepareStatement(sql);stmt.setLong(1,aluno.getId());stmt.execute();}catch(SQLExceptione){thrownewRuntimeException();}}
Os erros continuam aumentando com as alterações...
pintofree
tiagofla:
Os erros continuam aumentando com as alterações…
kkkkkkkkkkkkk, muita calma nessa hora. Seguinte na sua tabela o atributo é ID mesmo???
os novos erros sao de compilação ou execução?
posta as mensagem de erro pra podermso ver.
T
tiagofla
Valeu pessoal !!! Problema resolvido. Estava faltando colocar as seguintes linhas de código:
Método getLista de AlunoDAO:
aluno.setId(rs.getLong("id"));
No lista-alunos.jsp:
<td>${aluno.id}</td>
Ja a chamada do link estava correta: <td><a href="removeAluno?id=${aluno.id}">Remover</a></td>