Nesse exemplo abaixo tenho um while que retorna todos os candidatos a prefeitos da cidade escolhida de um combo do jsp anterior, e seguido de um caixa de texto que retorna a quantidade de votos que cada prefeito tem lançado no banco de dados, como faço para quando clicar no botão Atualizar, salvar os novos resultados digitados na caixa de texto no banco de dados, a parte do SQL eu sei, só não sei como faço ao clicar no Atualizar chamar um método no servlet.
importjava.io.*;importjava.sql.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassLancarextendsHttpServlet{Connectioncon;Statementstm;ResultSetres;protectedvoidprocessRequest(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Stringcidade=request.getParameter("cidade");response.setContentType("text/html;charset=UTF-8");PrintWriterout=response.getWriter();try{Class.forName("com.mysql.jdbc.Driver");con=DriverManager.getConnection("jdbc:mysql://localhost/resul_eleicoes","root","");stm=con.createStatement();res=stm.executeQuery("select * from prefeitos where cidade='"+cidade+"'");res.last();intt=res.getRow();res.beforeFirst();String[]candidato=newString[t];out.println("<html>");out.println("<head>");out.println("<title>Lancar Votos</title>");out.println("</head>");out.println("<body bgcolor=#CDC9C9><center>");out.println("<h2>Lancar Votos</h2><table border='1' width='150'>");out.println("<table border='1' width='200'>");inti=0;while(res.next()){out.println("<tr><td><b>"+res.getString("nome")+":</b></td><td> <input type='text' name='"+res.getString("numero")+"' value='"+res.getString("votos")+"' size='6' maxlength='6'></td></tr>");candidato[i]=res.getString("numero");i++;}out.println("</table>");out.println("<input type='button' name='atualizar' value='Atualizar' onClick=atualizar()>");out.println("<br><br><a href=lancavotos.jsp>Voltar</a>");out.println("</center></body>");out.println("</html>");}catch(SQLExceptione){}catch(ClassNotFoundExceptione){}finally{out.close();}}// <editor-fold defaultstate="collapsed" desc="Métodos HttpServlet. Clique no sinal de + à esquerda para editar o código.">/** * Handles the HTTP <code>GET</code> method. * @param request servlet request * @param response servlet response */protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{processRequest(request,response);}/** * Handles the HTTP <code>POST</code> method. * @param request servlet request * @param response servlet response */protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{processRequest(request,response);}/** * Returns a short description of the servlet. */publicStringgetServletInfo(){return"Short description";}// </editor-fold>}
A principio, não é uma boa pratica vc juntar a parte de SQL com a parte WEB, vc deve sequir o padrão MVC.
Em relação ao seu problema.
1. Vc deve ter um form
1- No action do seu formulario vc especifica para qual servlet (para onde) o seu dados serão processado .
O campo values sera o valor que sera enviada para a serlvet(no nosso caso) então vc nao precissa digitar nada porque o valor sera digitado pelo usuario por exemplo o se o usuario digitar ‘Rodrigo’ em uma text o value desta text sera “value = ‘Rodrigo’”.
2- Na servlet vc trata os dados e chama uma classe (bean) para cuidadar da regra de negocio l
3 - No bean toda regra de negocio eh feita e por exemplo retorna um valor para a servlet .
5 - A servlet verifica o retorna do bean e redireciona
6 - O jsp exibi a msg!!!
J
jimmyhc
? cade seu javascript Atualizar() ?
mapeia no web.xml um outra servlet. E chama ela !!
A
Arthur_Laender
Estava fazendo do jeito que o João Paulo me informou, mais da erro no if abaixo:
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
processRequest(request,response);if(Atualizar()){
res.beforeFirst();for(inti=0;i<t;i++) {res.next();stm.executeUpdate("update prefeitos set votos=getParameterById('"+res.getString("numero")+"') where cidade='"+cidade+"' and numero='"+res.getString("numero")+"'");}
}}
Fiz do jeito que ele tinha passado mais tava dando erro, então retirei o request.getParameter("atualizar"), o erro que mostra é tipos imcompatíveis
found: Atualizar
required: boolean
Segue código como está ficando.
importjava.io.*;importjava.sql.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassLancarextendsHttpServlet{Connectioncon;Statementstm;ResultSetres;Stringcidade;intt;String[]candidato;protectedvoidprocessRequest(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{cidade=request.getParameter("cidade");response.setContentType("text/html;charset=UTF-8");PrintWriterout=response.getWriter();try{Class.forName("com.mysql.jdbc.Driver");con=DriverManager.getConnection("jdbc:mysql://localhost/resul_eleicoes","root","");stm=con.createStatement();res=stm.executeQuery("select * from prefeitos where cidade='"+cidade+"'");res.last();t=res.getRow();res.beforeFirst();candidato=newString[t];out.println("<html>");out.println("<head>");out.println("<title>Lancar Votos</title>");out.println("</head>");out.println("<body bgcolor=#CDC9C9><center>");out.println("<h2>Lancar Votos</h2>");out.println("<form action='servletcontrole' method='post'>");out.println("<table border='1' width='200'>");while(res.next()){out.println("<tr><td><b>"+res.getString("nome")+":</b></td><td> <input type='text' id='"+res.getString("numero")+"' value='"+res.getString("votos")+"' size='6' maxlength='6'></td></tr>");}out.println("</table>");out.println("<input type='submit' name='atualizar' value='Atualizar'/>");out.println("</form>");out.println("<br><br><a href=lancavotos.jsp>Voltar</a>");out.println("</center></body>");out.println("</html>");}catch(SQLExceptione){}catch(ClassNotFoundExceptione){}finally{out.close();}}// <editor-fold defaultstate="collapsed" desc="Métodos HttpServlet. Clique no sinal de + à esquerda para editar o código.">/** * Handles the HTTP <code>GET</code> method. * @param request servlet request * @param response servlet response */protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{processRequest(request,response);}/** * Handles the HTTP <code>POST</code> method. * @param request servlet request * @param response servlet response */protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{processRequest(request,response);if(Atualizar()){res.beforeFirst();for(inti=0;i<t;i++){res.next();stm.executeUpdate("update prefeitos set votos=getParameterById('"+res.getString("numero")+"') where cidade='"+cidade+"' and numero='"+res.getString("numero")+"'");}}}/** * Returns a short description of the servlet. */publicStringgetServletInfo(){return"Short description";}// </editor-fold>}
Continua dando o erro no if abaixo:
imcompatible tybles
found: Atualizar
required: boolean
cannot find symbol
symbol: method Atualizar(java.lang.String)
location: class Lancar
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
processRequest(request,response);if(Atualizar(request.getParameter("botao"))){
res.beforeFirst();while(res.next()){
try{
stm.executeUpdate("update prefeitos set votos=getParameterById('"+res.getString("numero")+"') where cidade='"+cidade+"' and numero='"+res.getString("numero")+"'");}catch(SQLExceptione){
}
}
}}
Segue abaixo o Servlet completo:
importjava.io.*;importjava.sql.*;importjava.lang.*;importjavax.servlet.*;importjavax.servlet.http.*;publicclassLancarextendsHttpServlet{Connectioncon;Statementstm;ResultSetres;privateStringcidade;privatestaticfinalStringAcao_Atualizar="Atualizar";protectedvoidprocessRequest(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{cidade=request.getParameter("cidade");response.setContentType("text/html;charset=UTF-8");PrintWriterout=response.getWriter();try{Class.forName("com.mysql.jdbc.Driver");con=DriverManager.getConnection("jdbc:mysql://localhost/resul_eleicoes","root","");stm=con.createStatement();res=stm.executeQuery("select * from prefeitos where cidade='"+cidade+"'");out.println("<html>");out.println("<head>");out.println("<title>Lancar Votos</title>");out.println("</head>");out.println("<body bgcolor=#CDC9C9><center>");out.println("<h2>Lancar Votos</h2>");out.println("<form action='servletcontrole' method='post'>");out.println("<table border='1' width='200'>");while(res.next()){out.println("<tr><td><b>"+res.getString("nome")+":</b></td><td> <input type='text' id='"+res.getString("numero")+"' value='"+res.getString("votos")+"' size='6' maxlength='6'></td></tr>");}out.println("</table>");out.println("<input type='submit' name='botao' value='Atualizar'>");out.println("</form>");out.println("<br><br><a href=lancavotos.jsp>Voltar</a>");out.println("</center></body>");out.println("</html>");}catch(SQLExceptione){}catch(ClassNotFoundExceptione){}finally{out.close();}}// <editor-fold defaultstate="collapsed" desc="Métodos HttpServlet. Clique no sinal de + à esquerda para editar o código.">/** * Handles the HTTP <code>GET</code> method. * @param request servlet request * @param response servlet response */protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{processRequest(request,response);}/** * Handles the HTTP <code>POST</code> method. * @param request servlet request * @param response servlet response */protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{processRequest(request,response);if(Atualizar(request.getParameter("botao"))){res.beforeFirst();while(res.next()){try{stm.executeUpdate("update prefeitos set votos=getParameterById('"+res.getString("numero")+"') where cidade='"+cidade+"' and numero='"+res.getString("numero")+"'");}catch(SQLExceptione){}}}}/** * Returns a short description of the servlet. */publicStringgetServletInfo(){return"Short description";}// </editor-fold>}