Recuperando uma Lista do JSP ou Servlet para enviar para outro Servlet

6 respostas
A

Pessoal, estou fazendo manutenção em um projeto da faculdade, um CRUD cru (Java puro, sem frameworks,JSTL,EL .etc) somente com o trio dinâmico: JSP+Servlet+DAO ou seja, uma aplicação simples.

O problema é o seguinte:
tenho uma JSP (consultarUsuario.jsp) que exibe uma lista(tabela) de usuário(bean) com botões de alterar e excluir ao lado de cada registro da tabela, esta lista é enviada à página pelo Servlet (consultarUsuarioServlet.java).

o problema é o módulo de atualizar, quando o botão de atualizar é clicado é pego o id do registro e enviado ao OUTRO Servlet (PreAtualizarServlet.java) através de javascript. Neste Servlet é criado uma instância de usuário setado o Id com o que foi pego na página de consulta e…
é feita uma nova consulta no banco! (Isso me intriga!) para retornar uma outra Lista e dessa lista só é pego o objeto da 1ª posição e o mesmo é enviado ao JSP(atualizarUsuario.jsp) onde os campos são populados para alteração!

Pesquisei sobre Sessions, mas não consigo criar nem colocar um objeto dentro da mesma nada! não sei qual o código da Session fica no Servlet e qual fica no JSP.

Como faço para pegar a primeira lista(JSP =>Servlet) que é exibida na consulta e passar para o PreAtualizarServlet sem ter que ir no banco novamente para retornar uma Lista?

6 Respostas

A

Alguém poderia Ajudar?

D

que exibe uma lista(tabela)...

ao selecionar a linha clica em alterar, o botão alterar passa o id do USUARIO para o servlet que cria o formulario de alteração.

neste servlet por que você não chama um método assim? Usuario u = getUsuarioById(idUsuario)

Public Usuario getUsuarioById(int id){

//seleciona no BD através do ID do usuário que foi passado e retorna somente o usuário em questão

}
A

Olá douglaskd, lembrei-me que a aplicação não tinha Session e então criei uma para quando o usuário logar, passar a Lista pela sessão, o problema é que ao criar a sessão os botões de atualizar, remover da Lista ao ser clicado está dando NumberFormatException: null, ou seja o JavaScript pega o Id(já testado) mas não passa ao Servlet que não está recebendo nada.

Antes de criar a Sessão estava funcionando, o Servlet pegava o Id fazia a consulta no banco e abria a página de Atualização com os campos preenchidos.

D

coloca o código…

como você esta enviando o id via javascript ?

qual o código do botão alterar ?

como você resgata os valores dessa sessão ?

esta enviando via ajax ?

A

página JSP de Consulta, apresenta uma Lista:

<%@page import="java.util.List"%>
<%@page import="entidade.Usuario"
	contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>NUTRILINE</title>
</head>
<script type="text/javascript">

	function atualizar(id) {
		
		var idParam = document.getElementById("id");
		idParam.value = id;
		document.forms[0].action="<%=request.getContextPath()%>/PreAtualizarUsuarioServlet";
		document.forms[0].submit();
	}	
	
	function remover(id) {
	
		if (confirm("Deseja realmente excluir este ítem?")) {
			var idParam = document.getElementById("id");
			idParam.value = id;
			document.forms[0].action="<%=request.getContextPath()%>/RemoverUsuarioServlet";
			document.forms[0].submit();
		}

	}
	function gerarPDF(id) {
		var idParam = document.getElementById("id");
		idParam.value = id;
		document.forms[0].action="<%=request.getContextPath()%>/PDFUsuarioServlet";
		document.forms[0].submit();
	}
	function PDFGeral() {
		//var idParam = document.getElementById("id");
		//idParam.value = id;
		document.forms[0].action="<%=request.getContextPath()%>/PDFGeralUsuarioServlet";
		document.forms[0].submit();
	}
	
	
</script>
<body>
	<%@include file="/geral/header.jsp"%>
	<%@include file="/geral/rodape.jsp"%>
	<form action="<%=request.getContextPath()%>/usuario/menu.jsp"
		method="post">
		<input type="hidden" name="id" id="id">


		<table align=center bgcolor="#70DB93" style="border: 2px solid white">
			<tr>
				<td colspan=4 align="center" style="border: 2px solid white"><font
					color="#000FFF"><h2>CONSULTA USUÁRIO</h2></font>
				<p></td>
			</tr>
			<tr>
				<th align="center" style="border: 2px solid white">Nome</th>
				<th align="center" style="border: 2px solid white">Endereço</th>
				<th align="center" style="border: 2px solid white">Telefone</th>
				<th align="center" style="border: 2px solid white">Opções</th>
			</tr>
			<%
				List<Usuario> lista = (List<Usuario>) request.getAttribute("lista");
				for (int i = 0; i < lista.size(); i++) {
					Usuario usuario = lista.get(i);
			%>
			<tr>
				<td><font color="#000FFF"> <%=usuario.getNome()%>
				</font></td>
				<td><font color="#000FFF">
						<center><%=usuario.getEndereco()%></center>
				</font></td>
				<td><font color="#000FFF">
						<center><%=usuario.getTelefone()%></center>
				</font></td>
				<td align="center" style="border: 2px solid white"><input
					type="button" name="acao" id="acao" value="Atualizar"
					onclick="javascript:atualizar(<%=usuario.getId()%>);" /> <input
					type="button" name="acao" id="acao" value="Remover"
					onclick="javascript:remover(<%=usuario.getId()%>);" /> <input
					type="button" name="acao" id="acao" value="PDF do Item"
					onclick="javascript:gerarPDF(<%=usuario.getId()%>);" /></td>
			</tr>
			<%
				}
			%>
			<tr>
				<td colspan=3 align="center" style="border: 2px solid white"><a
					href="/nutriline/usuario/menu.jsp">MENU</a></td>
				<td colspan=1 align="center" style="border: 2px solid white"><input
					type="button" name="acao" id="acao" value="PDF Geral"
					onclick="javascript:PDFGeral();" /></td>
			</tr>
		</table>
	</form>
<BODY BGCOLOR="#90EE90">
</body>
</html>

Servlet PreAtualizar, deve receber o Id do JavaScript Atualizar da página de consulta

protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		

			//Integer id = Integer.parseInt(request.getParameter("id"));
			  String id = request.getParameter("id");
			//System.out.println(id);
			
			Usuario filtro = new Usuario();
			filtro.setId(Integer.parseInt(id));

			ControladorFachada fachada = new ControladorFachada();
			List<Usuario> lista;
			//Tentando pega a lista<Usuário> do ConsultarUsuarioServlet //NullPointException
			try {
				lista = fachada.consultarUsuario(filtro);
				//lista = (List<Usuario>) request.getAttribute("lista");
				request.setAttribute("usuario", lista.get(0));
				
			
			} catch (PersistenciaException e) {
				e.printStackTrace();
				
			}

			catch (ControladorUsuarioException e) {
				e.printStackTrace();

			}
			
			RequestDispatcher view = request
					.getRequestDispatcher("usuario/atualizarUsuario.jsp");
			view.forward(request, response);
		}
	}

Servlet Autenticar, onde a Sessão foi criada

protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		String login = request.getParameter(USUARIO); //USUARIO => Atributo Constante e Estático
		String senha = request.getParameter("senha");

		Usuario usuario = new Usuario();
		usuario.setLogin(login);
		usuario.setSenha(senha);

		ControladorFachada fachada = new ControladorFachada();
		String mensagem = null;
		HttpSession sessao = null;

		try {
			fachada.validarUsuario(usuario);
			sessao = request.getSession(true);
			sessao.setAttribute(USUARIO, usuario.getLogin());
			request.setAttribute(USUARIO,usuario.getLogin());
			mensagem = "logado com sucesso!";
			
		} catch (PersistenciaException e) {
			// TODO Auto-generated catch block
			mensagem = e.getMessage();
			e.printStackTrace();
		} catch (ControladorUsuarioException e) {
			// TODO Auto-generated catch block
			mensagem = e.getMessage();
			e.printStackTrace();
		}		
		
		/*
		String usuarioAutenticado = (String)                             
		sessao.getAttribute("usuario_autenticado");
		Long idUsuarioAutenticado = (Long)              
	    sessao.getAttribute("id_usuario_autenticado");
		
		 if (usuarioAutenticado == null || idUsuarioAutenticado == null) {
			response.sendRedirect("geral/autenticacao.jsp");
		 }
		 */
		
		request.setAttribute("mensagem", mensagem);
		
		if (mensagem.equals("logado com sucesso!") /*&& sessao.equals(true)*/) {
			request.setAttribute("usuario_autenticado", usuario.getLogin());
			RequestDispatcher view = request
					.getRequestDispatcher("geral/menuprincipal.jsp");
			request.setAttribute("mensagem", mensagem);
			view.forward(request, response);			
		
		} else if (mensagem.equals("preencha o campo usuário!")) {
			RequestDispatcher view = request
					.getRequestDispatcher("geral/autenticacao.jsp");
			request.setAttribute("mensagem", mensagem);
			view.forward(request, response);
		} else if (mensagem.equals("preencha o campo senha!")) {
			RequestDispatcher view = request
					.getRequestDispatcher("geral/autenticacao.jsp");
			request.setAttribute("mensagem", mensagem);
			view.forward(request, response);
			
		} else if (mensagem.equals("login ou senha incorretos!")) {
			RequestDispatcher view = request
					.getRequestDispatcher("geral/autenticacao.jsp");
			request.setAttribute("mensagem", mensagem);
			view.forward(request, response);
		} else {
			RequestDispatcher view = request
					.getRequestDispatcher("geral/autenticacao.jsp");
			view.forward(request, response);
			request.setAttribute("mensagem", mensagem);
		 
		}
		
		response.setHeader("Cache-Control","no-cache"); //HTTP 1.1  
		response.setHeader("Pragma","no-cache"); //HTTP 1.0  
		response.setDateHeader ("Expires", 0); //prevents caching at the proxy server 
		

	}

Criei a Sessão mas não estou utilizando-a para passar valores, pode ser a causa do erro!
Não estou usando AJAX.

A

Problemas:

1º Como pegar uma Lista de um ou JSP e enviar para um Servlet.

2º Criei uma Sessão para passar a Lista mas…

2º Botões de atualizar e remover estavam funcionando corretamente antes de criar uma Sessão mas, depois está dando NumberFormatException, JavaScript não envia o ID para o Servlet.

Códigos Acima.

Alguém pode Ajudar?

Criado 23 de março de 2013
Ultima resposta 28 de mar. de 2013
Respostas 6
Participantes 2