Olá a todos.
Estou estudando VRaptor usando a apostila FJ-28 da Caelum e estou naquela parte em que implemento um carrinho de compras e crio uma view jsp para ele.
Eu anotei minha classe Carrinho com @SessionScoped, mas de alguma forma não estou ganhando automaticamente o atributo de sessão ${carrinho} para ser usado nos meus jsp’s.
Minha pergunta é: Existe alguma configuração adicional que estou perdendo (talvez algo no web.xml) ?
Para ajudar, coloco um pouco do código:
@Component
@SessionScoped
public class Carrinho {
private List<Item> itens = new ArrayList<Item>();
private Double total = 0.0;
//getters e setters
@Resource
public class CarrinhoController {
private Carrinho carrinho;
private ProdutoDAO dao;
private Result result;
public CarrinhoController(Carrinho carrinho, ProdutoDAO dao, Result result) {
this.carrinho = carrinho;
this.dao = dao;
this.result = result;
}
@Post @Path("/carrinho")
public void adiciona(Item item) {
dao.recarrega(item.getProduto());
carrinho.adiciona(item);
result.redirectTo(this).visualiza();
}
@Get @Path("/carrinho")
public void visualiza(){
System.out.println(carrinho.getTotalDeItens() + " " + carrinho.getTotal());
}
visualiza.jsp abaixo
<h3>Itens do seu carrinho de compras</h3>
<table>
<thead>
<tr>
<th>Nome</th>
<th>Descrição</th>
<th>Preço</th>
<th>Qtde</th>
<th>Total</th>
</tr>
</thead>
<tbody>
<c:forEach items="${carrinho.itens}" var="item">
<tr>
<td>${item.produto.nome}</td>
<td>${item.produto.descricao}</td>
<td>${item.produto.preco}</td>
<td>${item.quantidade}</td>
<td><fmt:formatNumber type="currency" value="${item.total}" /></td>
</tr>
</c:forEach>
</tbody>
<tfoot>
<tr>
<td colspan="2"></td>
<th colspan="2">Total:</th>
<th><fmt:formatNumber type="currency" value="${carrinho.total}"/></th>
</tr>
</tfoot>
</table>
Aquele sysout dentro do método visualiza não deveria estar ali. Entretanto posso garantir que os valores corretos são computados e mostrados no console a cada adição nova de produto no meu carrinho.
A questão é porque não consigo acessar esses mesmos valores de dentro do visualiza.jsp? Estou vendo os objetos sendo construidos corretamente (o sysout me garantiu isso). Pq o jsp não acessa ${carrinho.itens}?
ps: O getter getItens() existe dentro de Carrinho.
