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

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?

Alguém poderia Ajudar?

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)

[code]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

}[/code]

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.

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 ?

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.

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?