Cast List em objeto retornado da session

8 respostas
dmribeiro

Fala galera,

Como fazer este cast funcionar? preciso que ele reconheça que este objeto é do tipo list, porem ele não reconhece.

Trecho da JSP

<%
      List<Produtos> pz = (List<Produtos>)request.getAttribute("pedido_produtos"); // erro ocorre aqui!!
	for(int i = 0; i < pz.size(); i++){	
	       System.out.println("tamanho " + i);
							%>
		<tr>
			<td><%=pz.get(i).getImagem()%></td>

Neste caso estou setando em uma servlet o “pedido_produtos” com o tipo List

sessao.setAttribute("pedido_produtos", prod_lista);

8 Respostas

K

mostre a parte do código que você instancia e insere a lista na sessão.

dmribeiro
package controle;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import Bo.PizzasAdmBO;
import To.Ped_Item;
import To.Pizzas;
import To.Produtos;

public class ControlaPedido_User extends HttpServlet {
	private static final long serialVersionUID = 1L;
	public Produtos produto;
	public Pizzas pizzas;
	public List<Pizzas> pizz_lista;	

	public ControlaPedido_User() throws Exception {
		produto = new Produtos();
		pizzas = new Pizzas();
		pizz_lista = new ArrayList<Pizzas>();
	}


	public List<Pizzas> getPizz_lista() {
		return pizz_lista;
	}


	public void setPizz_lista(List<Pizzas> pizz_lista) {
		this.pizz_lista = pizz_lista;
	}


	public Produtos getProduto() {
		return produto;
	}

	public void setProduto(Produtos produto) {
		this.produto = produto;
	}

	public Pizzas getPizzas() {
		return pizzas;
	}

	public void setPizzas(Pizzas pizzas) {
		this.pizzas = pizzas;
	}

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		HttpSession session = request.getSession();
		//List<Pizzas> ppzz = new ArrayList<Pizzas>(); 
		try {
		
			if (request.getParameter("acao").equals("carrinho") && session.getAttribute("login") != null) {
				pizzas.setId(Long.parseLong(request.getParameter("id")));
				pizzas.setNome(request.getParameter("nome"));
				pizzas.setIgredientes(request.getParameter("descricao"));
				pizzas.setPreco(Float.parseFloat(request.getParameter("preco")));
				pizzas.setImagem(request.getParameter("imagem"));
				pizz_lista.add(pizzas);
				
				System.out.println("listas " + pizz_lista.size());
				
				session.setAttribute("pedido_pizza", pizz_lista);
								
				response.sendRedirect("Pedido_User/Ped_Carrinho.jsp");								
				
			} else {
				System.out.println("usuario não logado");
				response.sendRedirect("menus_nao_logado.jsp"); 
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html");

		if (request.getParameter("acao").equals("carrinho")) {
			response.sendRedirect("Pedido/pedidoCad.jsp");

		}

	}

}
fabiocortolan

Não vi nada de “pedido_produtos”, apenas “pedido_pizza”, não está errado?

List&lt;Produtos&gt; pz = (List&lt;Produtos&gt;)request.getAttribute("pedido_produtos"); // Aqui não deveria ser "pedido_pizza"

session.setAttribute("pedido_pizza", pizz_lista); // Ou aqui não deveria ser "pedido_produtos"?
dmribeiro

Falta de atenção minha, colei aqui o código errado, o certo neste caso é pedido_pizza.

Assim, quando recupero ele na JSP eu não consigo fazer o Cast do objeto retornado da session para List.

fabiocortolan

Não consigo verificar o problema, mas vc já tentou usar JSTL para percorrer essa lista de objetos? Ficaria bem mais simples e com o código mais legível.
Aqui vai um exemplo:

&lt;c:forEach items="${lista_pizza }" var="pizza"&gt;
    &lt;tr&gt;  
        &lt;td&gt;${pizza.imagem }&lt;/td&gt;
    &lt;/tr&gt;
&lt;/c:forEach&gt;

Dá uma pesquisada em JSTL, é bem simples e melhor q usar scriptlet no seu HTML!

douglas_vidotto

Acredito que seja por que você esteja colocando o pedido_pizza, ou pedido_produto na sessão. Porém na tela você está pegando da requisição.

dmribeiro

Obrigado pela dica fabiocortolan, eu já conheço jstl e realmente fica bem melhor, vou fazer a alteração.

douglas_vidotto, tentei pegar da session na pagina JSP mas tbm não consegui, ele da problema de Cast.

Com o código que postei acima consigo visualizar os atributos do objeto que me é retornado, mas quando executo recebo uma exception falando que a lista esta nula, ou seja, ele não faz o Cast de object para list.

Mas valeu pela atenção galera, eu estou utilizando sem setar na sessão mesmo, estou trabalhando com uma lista publica para resolver provisoriamente meu problema.

douglas_vidotto

Huum…então dmribeiro. Você está usando o método sendRedirect. Ao fazer isso você devolve uma resposta ao usuário e ele depois faz uma outra requisição. Por isso os atributos de requisição se perdem e portanto a lista volta com valores nulos. Tenta usar um RequestDispatcher e veja se funciona.

Criado 28 de abril de 2013
Ultima resposta 29 de abr. de 2013
Respostas 8
Participantes 4