Executar Javascript dentro do Servlet?

4 respostas
V

Galera… to utilizando post em ajax pra popular uma tabela dentro do meu html e cheguei no seguinte problema: Preciso chamar uma function do js na minha página logo após inserir um registro no banco via hibernate… essa funcao seria resposavel por realizar a atualização da tabela… qual a melhor maneira de fazer isso??? Já tentei dar um out.println"(bla bla bla…) soh q naum rolou nao… tem outra maneira melhor?
Eu tentei tbm criar um funcao em javascript q logo apos q eu envio meu form via ajax ele recarrega essa table… más ai parece q o recarregamento é mais rápido do que a insercao no banco via hibernate e dai se tem 2 registros no banco ele sempre mostra 1 soh pq parece q nao deu tempo de inserir o outro…!!! Por isso queria colocar logo depois da insercao no servlet

minha function na index.jsp

function refresh_ben(){
                openPage('RecriarTable.jsp','tb_ben','');
            }

Ajax

function openPage(url,target,varGets){
                xmlRequest = objXMLHTTP(); //obj XMLRequest
                xmlRequest.onreadystatechange = function(){
                if(xmlRequest.readyState == 1){
                   document.getElementById(target).innerHTML = '<center><img src="loadingAnimation.gif" /></center>';
                }else if(xmlRequest.readyState == 4){
                               if(xmlRequest.status == 200){
                                               var pagina = unescape(xmlRequest.responseText);
                                               document.getElementById(target).innerHTML = pagina;
                                             
                                               //extraiScript(pagina);

                                               window.alert(pagina);
                                             
                               }else{
                                  document.getElementById(target).innerHTML = '<h2>Erro ao carregar pagina.</h2>';
                               }
                }
                }
                xmlRequest.open("POST",url + '?' + varGets,true);
                xmlRequest.send(null);
}

meu servlet que trata a adicao do novo registro no banco

package myServlets;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import Entities.Beneficiado;
import Entities.Document;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 *
 * @author Vinicius
 */
public class Benef_Treatment extends HttpServlet {

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=latin1");
        PrintWriter out = response.getWriter();

        try {
            Beneficiado b = new Beneficiado();

            b.setNome(request.getParameter("name"));
            if (b.getNome().isEmpty()) {
                new NullPointerException("Nome não pode ser vazio");
            }

            b.setRg(request.getParameter("reg"));
            if (b.getRg().isEmpty()) {
                new NullPointerException("RG não pode ser vazio");
            }

            b.setCargo(request.getParameter("cargo"));
            b.setDepartamento(request.getParameter("dpto"));
            b.setRamal(request.getParameter("ramal"));
            b.setCc(request.getParameter("cc"));

            
            if (b.getCc().isEmpty()) {
                new NullPointerException("Centro de custo não pode ser vazio");
            }

            String group = request.getParameter("group");

            if(group != null){
                b.setPlanta(group);
            } else {
                new NullPointerException("É necessário escolher uma planta");
            }

            Document main = (Document)request.getSession().getAttribute("doc");

            if(main == null){
                throw new NullPointerException("Não foi possível retornar Document!");
            }
          
            b.setIdDoc(main);           

            request.getSession().setAttribute("last_benef", b);

            new BenefDAO().insert(b);

        } catch (Exception ex) {
            response.sendRedirect("Err?err=" + ex.getMessage());

            ex.printStackTrace();

            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
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>
}

4 Respostas

B

No final de sua página jsp, chame a função para atualizar sua tabela.
Ex:

<html>
    <head></head>
    <body>
        ...
        <script type="text/javascript">
            refresh_ben();
        </script>
    </body>
</html>

A página deve ser a que a servlet irá chamar após inserir o beneficiado(que por sinal não aparece em seu código o.O")

V

Cara… acho q o buraco é mais em baixo… como eu chamo um servlet por um post AJAX nao ha necessidade de chamar nenhuma pagina depois do post… mas vou tentar isso e posto se deu certo…

B

if(xmlRequest.status == 200){ var pagina = unescape(xmlRequest.responseText); document.getElementById(target).innerHTML = pagina; window.alert(pagina); refresh_ben();//E se você colocar esta linha aqui??? ;p }else{ document.getElementById(target).innerHTML = '<h2>Erro ao carregar pagina.</h2>'; }

E se você chamar a função depois da requisição ser executada?

V

cara… resolvi o problema… na verdade nao tinha nada a ver com lentidao do hibernate… era javascript errado mesmo… vlw pela ajuda…

Criado 3 de novembro de 2009
Ultima resposta 4 de nov. de 2009
Respostas 4
Participantes 2