Exception

Bom dia JGirls and JMans…

O código abaixo é de uma Servlet que recebe uma requisição de uma JSP para verificar os pedidos de um cliente, retornar uma lista e mostrar os pedidos do mesmo… Porém, quando não há nenhum pedido para este cliente dá java.lang.IndexOutOfBoundsException: Index: 0, Size: 0…

Não estou sabendo onde nem com lançar uma exceção para tratar esse problema…
Caso alguém possa ajudar… Agradeço!!

Servlet

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

		List<PedidosBean> lista = new ArrayList<PedidosBean>();
		try {
			PedidosBean bean = new PedidosBean();
			PedidoBO bo = new PedidoBO();
			int codigo = Integer.parseInt(request.getParameter("id"));
			bean.setCodCliente(codigo);
			lista = bo.listarPedidoCliente(bean);
			request.setAttribute("listarPedidoCliente", lista);
			RequestDispatcher dispatcher = getServletContext()
					.getRequestDispatcher("/pedidocliente.jsp");
			dispatcher.forward(request, response);

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

}

BO

public List<PedidosBean> listarPedidoCliente(PedidosBean pedidos) {
		return dao.listarPedidoCliente(pedidos);
	}

DAO

public List<PedidosBean> listarPedidoCliente(PedidosBean pedidos) {

		List<PedidosBean> list = new ArrayList<PedidosBean>();		
		Session session = factory.openSession();
		if (session != null) {
			try {
				String sql = "from PedidosBean p where p.codCliente = :id";				
				Query query = session.createQuery(sql);
				query.setInteger("id", pedidos.getCodCliente()).list().get(0);
				list = query.list();
			} finally {
				// fecha a sessao
				session.close();
			}
		} else {
			throw new RuntimeException("Sessão Inválida.");
		}
		return list;
	}

Coloque também o fonte do pedidocliente.jsp

Esse seu get(0) não seria na linha de baixo não? em qual linha exatamente ocorre o erro?

resolvi de forma simple galera, no Bloco catch da minha SERVLET coloquei:

			RequestDispatcher dispatcher = getServletContext()
					.getRequestDispatcher("/ListarClienteServlet");
			dispatcher.forward(request, response);

daí ele me redireciona para a página onde tudo começou…
Preciso de ajuda agora para o seguinte:

como coloco uma div escondida no meu jsp com a mensagem (“Nenhum pedido para o cliente selecionado”) e faço a chamada dela somente quando for lançada a Exceção e ele retornar á página?

alguém se habilita? rsrs

Não sei a solução do seu problema, mas posso tentar dar uma ideia. Quando o servlet lança uma exceção e retorna à sua página você não devolve uma lista, certo? Caso não consiga enviar a lista, você pode fazer o servlet enviar uma string com uma mensagem de erro, como algo igual a (“Erro Lista”) para dentro do campo da página que você esteja usando para mostrar a lista. Porem o usuário não ve essa mensagem e o campo da página para onde ela é enviada fica oculta. Bom, você pode colocar um código javascript que trate eventos onchange nesse campo da lista. O código verifica se o texto enviado foi esse de erro. Caso seja, o código muda o style da div que você quer mostrar com a mensagem “Nenhum pedido para o cliente selecionado” de display:none; para display:block, ou outro tipo de display que voce quiser.

É uma ideia, espero que ela seja util.

Abraços!