desk
Julho 28, 2010, 2:14pm
#1
Olá pessoal, é o seguinte. Estou fazendo 1 sistema de carrinho de compras e estou guardando o carrinho(array) na sessão. Agora estou tentando fazer a parte para deletar o produto do carrinho.
O que eu queria fazer é o seguinte, assim que o cara clicar no link para deletar o produto, eu passaria o tal índice que o produto está no array para a action e um método o deletaria, pelo que vi é a maneira mais fácil de se fazer isso, porém estou tendo problemas na hora de passar o tal índice do produto para a action
segue o código:
[code]org.apache.jasper.JasperException: An exception occurred processing JSP page /carrinho-compras.jsp at line 51
48:
49: ${item.livro.nome}
50: ${item.quantidade}
51: X
[/code]
[code]
Nome
Quantidade
Preço
Excluir
TOTAL
<c:forEach var=“item” items="${carrinhoCompras.itens}">
${item.livro.nome}
${item.quantidade}
X
<fmt:setLocale value=“pt_BR”/>
R$: <fmt:formatNumber value="${item.livro.preco}" minFractionDigits=“2”/>
</c:forEach>
R$: <fmt:formatNumber value="${carrinhoCompras.total}" minFractionDigits=“2” />
[/code]
[code]
public class RemoveItemAction {
private int cod ;
@Action(value="removeItem", results={
@Result(name="ok", location="/carrinho-compras.jsp")
})
public String execute() {
Carrinho carro = (Carrinho) ActionContext.getContext().getSession().get("carrinhoCompras") ;
carro.removeLivro(cod) ;
return "ok" ;
}
public int getCod() {
return cod;
}
}
[/code]
[code]public class Carrinho {
private List itens = new ArrayList();
private Double total = 0.0 ;
public void adicionaLivro(ItemCarrinho l) {
this.itens.add(l) ;
this.total = total + (l.getLivro().getPreco() * l.getQuantidade()) ;
}
public void removeLivro(int l) {
this.total = total - itens.get(l).getLivro().getPreco() ;
this.itens.remove(l) ;
}
// getters and setters
}[/code]
Grato.
Não acha que é melhor, ao invés de usar o indice do array usar o id do item? Assim você só precisa localizar ele na lista e removê-lo, assim vai diminuir o risco de ter problemas com o indice do array/lista.
Flw! :thumbup:
desk
Agosto 7, 2010, 6:43am
#4
Como eu faria para deletar assim? Pelo que eu saiba eu deveria passar o Índice em que o produto está para assim ser apagado, mas enfim… tentei aqui deletar pelo id mas não acontece nada, segue o código:
[code]
Nome
Quantidade
Excluir
Preço
TOTAL
<c:forEach var=“item” items="${carrinhoCompras.itens}">
${item.livro.nome}
${item.quantidade}
X
<fmt:setLocale value=“pt_BR”/>
R$: <fmt:formatNumber value="${item.livro.preco}" minFractionDigits=“2”/>
</c:forEach>
<c:if test="${carrinhoCompras.itens != null}">
R$: <fmt:formatNumber value="${carrinhoCompras.total}" minFractionDigits=“2” />
</c:if>
[/code][code]public class RemoveItemAction {
private ItemCarrinho item ;
@Action(value="removeItem", results={
@Result(name="ok", location="/carrinho-compras.jsp"),
@Result(name="removido", location="/carrinho-compras.jsp")
})
public String execute() {
Carrinho carro = (Carrinho) ActionContext.getContext().getSession().get("carrinhoCompras") ;
int posicao = carro.getItens().indexOf(item) ;
carro.removeLivro(posicao) ;
return "ok" ;
}
public String removerTudo() {
Carrinho carro = (Carrinho) ActionContext.getContext().getSession().remove("carrinhoCompras") ;
return "removido" ;
}
public void setItem(ItemCarrinho item) {
this.item = item;
}
public ItemCarrinho getItem() {
return item;
}
}[/code][code]public class Carrinho {
private List itens = new ArrayList();
private Double total = 0.0 ;
public void adicionaLivro(ItemCarrinho l) {
this.itens.add(l) ;
this.total = total + (l.getLivro().getPreco() * l.getQuantidade()) ;
}
public void removeLivro(int l) {
this.itens.remove(l) ;
}
public Double getTotal() {
return total;
}
public void setTotal(Double total) {
this.total = total;
}
public List<ItemCarrinho> getItens() {
return itens;
}
public void setItens(List<ItemCarrinho> itens) {
this.itens = itens;
}
}[/code]
[code]type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
java.lang.ArrayIndexOutOfBoundsException: -1
java.util.ArrayList.remove(ArrayList.java:390)
br.com.ibooker.modelo.Carrinho.removeLivro(Carrinho.java:17)
br.com.ibooker.action.RemoveItemAction.execute(RemoveItemAction.java:22)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)
[/code]