Boa tarde pessoal.
Minha duvida é a seguinte:
Gostaria de criar uma pagina que mostrasse a mensagem “processando” enquanto um servlet estivesse processando alguns calculos no back-end. Assim que o servlet terminasse ele chamaria uma pagina de sucesso quanquer.
Você pode fazer o seguinte Sérgio.
O mesmo servlet que vai fazer o processamento pode enviar uma mensagem de “Em processamento …” para o usuário. Por exemplo :
[code]
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType(CONTENT_TYPE);
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>Servlet1</title></head>");
out.println("<body>");
out.println(“
Aguarde processamento …
”);out.println("</body></html>");
out.close();
for(int i=0; i<1000000; i++)
{
//processamento demorado
}
//Quando terminar, o servlet redireciona para a página que irá exibir o resultado
RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
rd.forward(request,response);
}[color=red][/color][code]
Masdeval, tentei implementar o servlet usando essa ideia, o problema é que quando out.close() é invocado ele passa todo o controle para a pagina e perde o bloco de processamento e o bloco do forward().
Se tiver um outro modo de fazer a pagina de staus não deixe de me dar um help.
T +
Amigo Sérgio, por um acaso vc conseguiu fazer esta mensagem de “Aguarde, Processando …” na tela ?
Estou precisando implementar isso.
Obrigado
Vimieiro
Acho que dá pra fazer usando AJAX (prototype por exemplo)
Tu iria chamar o um javascript que meteria um innerHTML “Processando…” num qualquer de sua pagina e mandaria a requisição via ajax para o seu servlet…
Acho que funcionaria sem problema algum…
Abraços
Eu pesquisei aqui no GUJ e estou tentando fazer como um colega sugeriu e é ± isso que vc está sugerindo :
No JS :
function enviarTxtCemig(acao){
document.getElementById(divStatus).innerHTML = '<img src='${pageContext.request.contextPath}/images/ajax-loader.gif'></img>';
document.forms[0].acao.value = acao;
if (verificaTxtCemig()){
document.forms[0].submit();
}
else{
return false;
}
document.getElementById(divStatus).innerHTML = "";
}
Mas não quer nem rodar e não sei por quê !!!???
vimieiro
abs
Amigo, faça assim… baixe o protorype adicione no seu HTML e faça uma função mais ou menos assim:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
<title>Minah Pagina</title>
<script type="text/javascript" src="prototype.js"></script>
<script type="text/javascript">
function getPagina() {
new Ajax.Request('NomeDoMeuServlet.jsp', {
onCreate: function(){
$('contServlet').innerHTML = '<img src="${pageContext.request.contextPath}/images/ajax-loader.gif" />';
},
onSuccess: function(transport) {
$('contServlet').innerHTML = transport.responseText;
}
});
}
</script>
</head>
<body>
<a href="#" onclick="getPagina();">Abrir meu servlet</a><br>
<!-- Abaixo será mostrado o conteúdo do teu servlet, ou seja, se ele retornar um html, será mostrado abaixo -->
<div id="contServlet"></div>
</body>
</html>
Cara vê se isto te ajuda… No exemplo ele irá requisitar o teu servlet, não sei se é isto que vc precisa… se no teu caso for enviar um formulario para o servlet processar e retornar o resultado de um calculo, vc pode fazer assim:
function getPagina() {
url = 'NomeDoMeuServlet.jsp?'+ $('NomeDoForm').serialize();
new Ajax.Request(url, {
onCreate: function(){
$('contServlet').innerHTML = '<img src="${pageContext.request.contextPath}/images/ajax-loader.gif" />';
},
onSuccess: function(transport) {
$('contServlet').innerHTML = transport.responseText;
}
});
}
Neste caso o teu servlet deverá imprimir por out.print o resultado do teu cálculo…
Teste lá brother…