Carrinho de compras Struts2

9 respostas
desk

Olá pessoal, estou tentando criar um carrinho de compras porém estou com muitas dúvidas… já procurei no google e não achei nada que me interessa-se. Bom, não sei se pensando e fazendo da maneira correta porém é o seguinte: o usuario vai para página onde mostra o tal produto, nele tem um form e um botao que envia para uma action, eu queria que essa action pega-se os dados do tal produto e adiciona-se o produto no carrinho e assim iria pra jsp onde mostraria os produtos que tem no carrinho, na action tem 1 list do produto (getter) e 1 int quantidade (getters and setters) e no metodo execute ele pegaria os campos do formulario e adicionava ao carrinho, estou em dúvida quanto a isso, como ele pegaria os campos do formulario? porque a pagina que mostra o tal produto já está vindo de 1 action. Vou armazenar esse carrinho na session, fiz assim: na hora do usuario logar ele loga e cria a sessao de login + o de carrinho

if (user.getEmail().equals(usuario.getEmail()) && user.getSenha().equals(usuario.getSenha())) {
			ActionContext.getContext().getSession().put("usuarioLogado", usuario) ;
			ActionContext.getContext().getSession().put("carrinhoCompras", carrinho) ;
			return "ok" ;
		}

daria pra fazer desse jeito? ow seria melhor criar 1 classe modelo de Carrinho ± assim:

public class Carrinho {
	private List<Livros> livros = new ArrayList<Livros>() ;
	private Double total = 0.0 ;
	
	public void adicionaLivro(Livros l) {
		this.livros.add(l) ;
		this.total += l.getPreco() ;
	}

	public List<Livros> getLivros() {
		return livros;
	}

	public Double getTotal() {
		return total;
	}
}

Estou com muitas dúvidas, não sei uma boa maneira de fazer… se alguem puder me ajudar, dar exemplos, irá ajudar bastante
Grato!

9 Respostas

juniorsatanas

Posta o resto do codigo aqui… quero aprender struts !

ehhehe

desk
Bom pessoal, fiz uma modificação no codigo, mas quando executo da 404, já chequei a action, está tudo certinho:
type Status report

message There is no Action mapped for namespace / and action name adicionaCarrinho.

description The requested resource (There is no Action mapped for namespace / and action name adicionaCarrinho.) is not available.
Pelo que intendi, oque o sistema de carrinho esta fazendo fazendo e o seguinte: tenho 1 lista de livros com a quantidade, que na verdade é o carrinho, sempre que adiciono um livro ele soma o total e quando a pesosa clicar na imagem para adicionar ao carrinho, xama a action que cria uma sessão carrinhoCompras e adiciona ao carrinho o tal livro, e assim redireciona, correto?! porém estou pensando, como ele pega as informações do tal item q a pessoa quer colocar? porque o tal produto está sendo mostrado a partir de uma action já. Essa é minha dúvida, como passar os resultados de uma action para a outra. não sei se está tudo correto, me corrijam caso contrario
public class Carrinho {
	private List<ItemCarrinho> livros ;
	private Double total = 0.0 ;
	
	public void adicionaLivro(ItemCarrinho l) {
		this.livros.add(l) ;
		this.total += l.getLivro().getPreco() ;
	}

	public Double getTotal() {
		return total;
	}
	public List<ItemCarrinho> getLivros() {
		return livros;
	}
}
public class ItemCarrinho {
	private Livros livro ;
	private int quantidade ;
	
	public int getQuantidade() {
		return quantidade;
	}
	public void setQuantidade(int quantidade) {
		this.quantidade = quantidade;
	}
	public void setLivro(Livros livro) {
		this.livro = livro;
	}
	public Livros getLivro() {
		return livro;
	}
}
public class AdicionaCarrinhoAction {
	private ItemCarrinho livro ;
	private Carrinho carro = new Carrinho() ;
	

	@Action(value="adicionaCarrinho", results={
			@Result(name="ok", location="/carrinho-compras.jsp")
	})
	public String execute() {
		verificaSession() ;
		carro.adicionaLivro(livro) ;
		return "ok" ;
	}
	
	public void verificaSession() {
		ActionContext.getContext().getSession().put("carrinhoCompras", carro) ;
	}

	// getters and setters
<a href="adicionaCarrinho">
	<img src="images/carrinho-compras-add.png" /> 
</a>
desk

up

Eduardo_Bregaida

Vc precisa de um Form que receba ItemCarrinho para depois poder adicionar na Sessão (Carrinho), vc tá com dificuldade de quando está no JSP pegar o valor e jogar para salvar não é? :smiley:

desk
Como assim um form que receba itemcarrinho pra dps poder adicionar na sessao?? isso, esotu com dificuldade de pegar os valores e salvar… no caso está dando esse erro de action ai… vc poderia me dar 1 exemplo?? no caso  está vindo os valores de 1 action né… mostrando os dados do tal livro… tipo:

Nome do livro: ${livro.nome}

Preço do livro: ${livro.preco}

<a> Add ao carrinho </a>

No caso vc diz que nao teria q ser 1 link e sim um form? no caso :

Nome do livro: ${livro.nome} Preço do livro: ${livro.preco}

Seria isso?

Grato!!!

Eduardo_Bregaida

Vc precisa criar um form e associar a Action, dá uma procurada por tutoriais de Struts 2 que mostra como associar isso.

[]sss

desk
Eduardo Bregaida:
Vc precisa criar um form e associar a Action, dá uma procurada por tutoriais de Struts 2 que mostra como associar isso.

[]sss

Cara, dei uma procurada aqui e creio q não achei nada interessante.. porém achei um negocio aqui que talvez seja isso, chama Ações Encadeadas. pelo que li diz o seguinte... o resultado chain: permite que vc defina uma ação como resultado de outra, promove o reuso de ações ao invés da repetição de código, necessita do interceptador chain, as propriedades de todas as ações encadeadas estão disponíveis no final da cadeia.

No caso seria isso né, pq como os resultados do tal produto que vai ser adicionado ao carrinho está sendo mostrado por 1 action, a action de adicionar pegaria os valores dessa action anterior e adicionava, correto?!

Dei uma averiguada, estava dando aquele erro de action pq não tava atualizando, reiniciei o computador e atualizou, que demora pra atualizar hein?! agora está dando um erro no metodo de add ao carrinoh mesmo, qual seria a solução?
java.lang.NullPointerException
	br.com.ibooker.modelo.Carrinho.adicionaLivro(Carrinho.java:10)
	br.com.ibooker.action.AdicionaCarrinhoAction.execute(AdicionaCarrinhoAction.java:20)
public class Carrinho {
	private List<ItemCarrinho> livros ;
	private Double total = 0.0 ;
	
	public void adicionaLivro(ItemCarrinho l) {
		this.livros.add(l) ;
		this.total += l.getLivro().getPreco() ;
	}

	public Double getTotal() {
		return total;
	}
	public List<ItemCarrinho> getLivros() {
		return livros;
	}
}
package br.com.ibooker.action;

import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;

import com.opensymphony.xwork2.ActionContext;

import br.com.ibooker.modelo.Carrinho;
import br.com.ibooker.modelo.ItemCarrinho;

public class AdicionaCarrinhoAction {
	private ItemCarrinho livro ;
	private Carrinho carro = new Carrinho() ;

	@Action(value="adicionaItem", results={
			@Result(name="ok", location="/carrinho-compras.jsp")
	})
	public String execute() {
		verificaSession() ;
		carro.adicionaLivro(livro) ;
		return "ok" ;
	}
	
	public void verificaSession() {
		ActionContext.getContext().getSession().put("carrinhoCompras", carro) ;
	}

	
	public Carrinho getCarro() {
		return carro;
	}
	public void setCarro(Carrinho carro) {
		this.carro = carro;
	}
	public ItemCarrinho getLivro() {
		return livro;
	}
	public void setLivro(ItemCarrinho livro) {
		this.livro = livro;
	}
}

Porque está demorando tanto pra atualizar os resultados? no caso aquele erro de action tava dando 1 dia atraz, só depois que desliguei o pc, qdo voltei tava dando outro resultado.. fora isso fiquei 1h tentando arrumar o erro de action e dava o mesmo resultado sempre.. pq será?

Grato!

Eduardo_Bregaida

Bom my friend eu não manjo de Struts 2 mas com a ajuda do Felipe Torres Carrasco aparentemente ele me disse q se vc ler com calma esse material:
http://www.vaannila.com/struts-2/struts-2-example/object-backed-java-beans-example-1.html vc vai conseguir alcançar seus objetivos, se conseguir por favor n esqueça de comentar a solução e colocar o titulo como [Resolvido]
=)
[]sssss

desk

Cara, deixa eu te perguntar… coisa simples, eu tenho 1 action mostrando os resutlados de 1 consulta… por exemplo: nome: ${livro.nome} preço: ${livro.preco} e outros valores… teria como eu pegar esses valores que estão sendo mostrados e adicionar a uma session?

Teria como vc me passar o contato do Felipe Torres?

[]s

Criado 31 de março de 2010
Ultima resposta 4 de mai. de 2010
Respostas 9
Participantes 3