Duvida em relação a mostrar conteúdo ao pressionar botão

5 respostas
coca1na

Pessoal, faz muuuito tempo que não mecho com Java, e to fazendo uma aplicação simples em JSP e Servlet que faz o seguinte:

Disponibiliza um form para inserção de dados
Guarda os dados em um vetor de String

Daí tenho um outro form apenas com um botão consultar, e no próprio jsp deste form eu adcionei o código pra mostar os dados já armazenados no vetor.

Eu sei como fazer para sempre que já tiver algum dado armazenado, os dados serem apresentados, porém eu queria que os dados só fosse apresentados ao pressionar o botão consultar do form mencionado.

Podem me ajudar ?

Segue trecho do código.

index.jsp - form

</form>
            <form name="consultaragenda" method="post"  action="" >
            <input name="consultar" type="submit" value="Consultar"/>
        </form>

Mostrar as informações quando já tiver algo cadastrado:

<%
            CalendarioServlet c = new CalendarioServlet();
            if(c.contato[0] != null){
            for(int i=0;i<c.contador;i++){
                out.println(c.contato[i]);
            }
            }
        %>

Obs.: CalendarioServlet é o servlet que busca as informações de outro formulário na página index.jps e armazena no vetor contato[]

5 Respostas

Romildo_Paiter

E ai Coca1na

</form>  
<form name="consultaragenda" method="post"  action="[ENVIA_PARA_ALGUMA_SERVLET]" >  
    <input name="consultar" type="submit" value="Consultar"/>  
</form>

Bom, quando se fala em WEB, temos requisições e respostas a sua action não estava enviando nada para ninguém. O que você deve fazer é enviar para alguma Servlet, JSP ou quem sabe alguma função AJAX, para que ele possa ler o seu vetor e colocar na sua tabela. Do contrário não funciona mesmo.

Essa sua JSP, ele vem de uma Servlet?

Ao vc mandar adicionar o conteúdo do formulário superior ele já grava na memória?

No botão consultar tem que destinar uma função para ele, seja usando um Servlet, o mesmo jsp que pega o seu vetor ou pode pedir para o ajax preencher uma table com os dados que vc quer.

espero ter ajudado.

att

coca1na

Falae Romildo, primeiramente obrigado pela resposta.

Bom, vamos lá.

Em relação à estrutura, tenho um login.jsp que neste primeiro momento não faz nada, nenhuma validação, apenas encaminha para a index.jsp.

Na index.jsp, eu tenho até o momento dois formulários, um para cadastro das informações que envia dados para um servlet (CalendarioServlet).

O CalendarioServlet por sua vez, recupera os dados do formulário por meio do request e guarda as informações em um array de Strings.

Tenho na index.jsp um segundo formulário (este postado no tópico) cuja função eu quero que seja recuperar as informações do array de Strings contido em CalendarioServlet e disponibilizar na página index.jsp, porém sem utilizar Ajax.

Acredito que a única forma de eu disponibilizar essa informação na index.jsp sem utilizar ajax, seja criando a função para demonstrar os dados na própria index.jsp.

O que eu tenho no momento, é a possibilidade de mostrar os dados na index.jsp a partir do momento que algum dado é gravado no array de Strings, porém gostaria de implementar para que sejam apresentadas apenas quando o botão consultar for pressionado.

Vou colocar no post abaixo todo o código que eu fiz até agora.

coca1na

login.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Calendário - Login</title>
    </head>
    <body>
        <form name="login" method="post" action="index.jsp">
            Usuário:
            <input name="usuario" type="text" id="usuario" />
            <br />
            Senha:
            <input name="senha" type="password" id="senha" />
            <br />
            <input name="logar" type="submit" value="Login" />
        </form>
    </body>
</html>

index.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page language="java" import="servlets.CalendarioServlet"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Calendário</title>
    </head>
    <body>
        <form name="agenda" method="post" action="CalendarioServlet">
            Nome:
            <input name="nome" type="text" id="nome" />
            <br />
            Sobrenome:
            <input name="sobrenome" type="text" id="sobrenome" />
            <br />
            Telefone:
            <input name="telefone" type="text" id="telefone" />
            <br />
            Sexo:
            <input name="sexo" type="radio" value="M" />M
            <input name="sexo" type="radio" value="F" />F
            <br />
            Idade:
            <input name="idade" type="text" id="idade" />
            <br />
            E-mail:
            <input name="email" type="text" id="email" />
            <br />
            Site:
            <input name="site" type="text" id="site" />
            <br />
            <input name="cadastrar" type="submit" value="Cadastrar" />
        </form>
                <form name="consultaragenda" method="post"  action="" >
            <input name="consultar" type="submit" value="Consultar"/>
        </form>

        <%
            CalendarioServlet c = new CalendarioServlet();
            if(c.contato[0] != null){
            for(int i=0;i<c.contador;i++){
                out.println(c.contato[i]);
            }
            }
        %>

    </body>
</html>

CalendarioServlet.java

package servlets;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CalendarioServlet extends HttpServlet {
  
    public static String contato[]=new String[100];
    public static int contador=0;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        try {
        contato[contador] = "Nome: " + request.getParameter("nome") + " " + request.getParameter("sobrenome") + "<br />" +
                "Telefone: " + request.getParameter("telefone") + "<br />" +
                "Sexo: " + request.getParameter("sexo") + "<br />" +
                "Idade: " + request.getParameter("idade") + "<br />" +
                "E-Mail: " + request.getParameter("email") + "<br />" +
                "Site: " + request.getParameter("site") + "<br />" + "<br />";
        contador++;
        response.sendRedirect("index.jsp");
        }
        catch (Exception e) {}
    } 

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
        

    } 

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);



    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }

}
Romildo_Paiter

Bom vamos lá.

Como disse anteriormente. O seu form consultaagenda tem que ser enviado para alguém.

O que vc pode fazer é o seguinte dentro da mesma Servlet [CalendarioServlet], você faz um case para saber o parametro value que bem do botão.

int valorBTN = Integer.parseInt(request.getParameter("botao"));		
		switch (valorBTN) {
		case 1:
				gravaDadosEnviados();
			break;
		case 2:
				listaDadosEnviados();
			break;
		default:
			break;
		}

Esse codigo abaixo persiste no banco e traz uma lista com todos os produtos. Esses produtos são enviados de volta para a pagina que eu quero abrir pelo RequestDispatcher, informando a pagina que ele deve abrir. E o rd.forward executa a abertura a pagina;

O comando mais inportante para vc é o request.setAttribute("variavelParaPagina", listaDoConteudodoCalendari());, nesse momento vc esta passando a lista para a pagina que vc quer exibir o conteudo.

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
		throws ServletException, IOException {
		
		ProdutoDAO prodDAO = new ProdutoDAO();
		
		try {
			request.setAttribute("listarProduto", prodDAO.listarTodos());
			
			RequestDispatcher rd = request.getRequestDispatcher("/listaProdutos.jsp");
			
			rd.forward(request, response);
			
		} catch (SQLException e) {
			request.setAttribute("mgs", e.getMessage());			
			//erro de banco 
			RequestDispatcher rd = 
				request.getRequestDispatcher("/ViewErro.jsp");
			rd.forward( request , response);
			
			e.printStackTrace();
		}
	}

E para exibir o conteúdo da lista, você vai ter que criar a jsp que vc enviando. E pode se basear nesse código que esta abaixo.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Listagem de Produto</title>
</head>
<body>
<h1><a href="${pageContext.request.contextPath}">Voltar</a></h1>

<table>
	<thead>Listagem de Produto</thead>
	<tr>
		<td><strong>ID</strong></td>
		<td><strong>NOME</strong></td>
		<td><strong>DESCRICAO</strong></td>
		<td><strong>PRECO</strong></td>
		<td><strong>PRECO FMT</strong></td>
		<td><strong>&nbsp;</strong></td>
		<td><strong>Comprar</strong></td>
	</tr>
	<c:set var="soma" value="0" />
	<c:if test="${empty(listarProduto)}">
		<tr>
			<td colspan="6"><font color="red">Não existem registros em produtos</font></td>
		</tr>
	</c:if>
	<c:if test="${not empty(listarProduto)}">
		<c:forEach var="prod" items="${listarProduto}">
			<tr>
				<td>${prod.id}</td>
				<td>${prod.nome}</td>
				<td>${prod.descricao}</td>
				<td>${prod.precoFormatado}</td>
				<td>R$&nbsp;<fmt:formatNumber value="${prod.preco}" maxFractionDigits="2" minFractionDigits="2" /></td>
				<td>&nbsp;</td>
				<td><a href="#">Comprar</a></td>
			</tr>
			<c:set var="soma" value="${soma+1}" />
		</c:forEach>		
	</c:if>
	<tr>
		<td colspan="6"><font color="green">Numero de Registros: ${soma}</font></td>
	</tr>
</table>

</body>
</html>

Acho que isso pode te ajudar.

coca1na

Cara, brigadao pelas respostas…

Acabei fazendo da seguinte forma:

Criei uma consulta.jsp onde ao pressionar o botão Consultar da index.jsp, o sistema é direcionado para consulta.jsp onde todos os dados cadastrados são listados.
to implementando agora a parte de alteração dos dados.

Por enquanto vou deixar assim, vou deixar pra fazer algo um pouco mais decente quando resolver aplicar validações e banco de dados.

Mas brigadão mesmo pelas respostas cara.

Criado 8 de outubro de 2010
Ultima resposta 8 de out. de 2010
Respostas 5
Participantes 2