Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-SemDerivados CC BY-NC-ND. Você possui a permissão para visualizar e compartilhar, desde que atribua os créditos do autor. Não poderá alterá-los e nem utilizá-los para fins comerciais.
Atribuição-SemDerivações-SemDerivados
CC BY-NC-ND
Cursos / Informática para Internet / Desenvolvimento Web I / Aula
Voltando para o arquivo catalogo.jsp, a segunda parte de seu código é mostrada na Listagem 4.2. Observe a declaração de uso do LivrariaBean nas linhas 25 a 27. O marcador <jsp:useBean > indica a classe do bean a ser instanciado (já que o escopo é page, o bean será instanciado em cada acesso). O identificador do bean (atributo id) é livrariaBean, o qual é utilizado no restante do arquivo para referenciar o bean. Sua propriedade de nome sistema é configurada com o valor da expressão ${sistemaLivraria}, o qual irá retornar o atributo do contexto dos Servlets de nome “sistemaLivraria”. Relembrando, esse atributo é criado pela classe LivrariaContextListener, vista anteriormente, e referencia a instância criada para o sistema (objeto Livraria).
<jsp:useBean id="livrariaBean" class="livraria.negocio.LivrariaBean" scope="page" >
<jsp:setProperty name="livrariaBean" property="sistema" value="${sistemaLivraria}" />
</jsp:useBean>
Por questões didáticas, as linhas 29 a 36 desse arquivo, que são relacionadas ao parâmetro da requisição Add, serão apresentadas no final da aula. Com relação ao código mostrado na Listagem 4.3, ele é responsável por mostrar o conteúdo do carrinho de compras. Usamos um marcador
Caso não existam itens no carrinho de compras, ou seja, o atributo numeroItens do carrinho de compras seja igual a 0, a mensagem “Seu carrinho de compras está vazio.” será apresentada, conforme mostrado nas linhas 47 a 49.
<c:choose>
<c:when test="sessionScope.cart.numeroItens > 0">
<c:url var="url" value="/livros/mostrarCarrinho">
<c:param name="limpar" value="0"/>
<c:param name="remover" value="0"/>
</c:url>
<p>
<a href="${url}">Ver carrinho de compras</a>
<c:url var="url" value="/livros/comprar" />
<a href="${url}">Finalizar compras</a></strong>
</p>
</c:when>
<c:otherwise>
Seu carrinho de compras está vazio.
</c:otherwise>
</c:choose>
A próxima parte do código, mostrado na Listagem 4.4, é responsável por mostrar a lista de livros disponíveis para compra. Para cada livro serão mostradas informações e links para se visualizar os detalhes do livro e para se adicionar o livro no carrinho de compras. Para isso, usamos o marcador <c:forEach >, visto na linha 58. Observe que a coleção de objetos utilizada no comando for é determinada pela expressão ${livrariaBean.livros}, ou seja, pelo retorno do método getLivros() do objeto livrariaBean. Cada objeto dessa coleção será armazenado na variável de nome livro e utilizado em comandos como o da linha 60, que pega o atributo idLivro e armazena seu valor em uma variável local também chamada de idLivro. A criação de um link para a página de apresentação dos detalhes do livro é mostrada nas linhas 62 a 64, adicionando como parâmetro a variável idLivro.
A linha 65 é responsável por apresentar o título do livro que está selecionado pelo marcador <c:forEach >. Já na linha 68, temos o uso do marcador <fmt:formatNumber > para apresentar o preço do livro como moeda. Isso fará a inclusão do símbolo $ antes do número e o uso de duas casas decimais para apresentação do valor.
<br>
<br>
<h3>Livros disponíveis para compra:</h3>
<div>
<table summary="layout">
<c:forEach var="livro" begin="0" items="${livrariaBean.livros}">
<tr>
<c:set var="idLivro" value="${livro.idLivro}" />
<td bgcolor="#ffffaa">
<c:url var="url" value="/livros/detalhesLivro" >
<c:param name="idLivro" value="${idLivro}"/>
</c:url>
<a href="${url}"><strong>${livro.titulo}</strong></a>
</td>
<td bgcolor="#ffffaa" rowspan=2>
<fmt:formatNumber value="${livro.preco}" type="currency"/>
</td>
<td bgcolor="#ffffaa" rowspan=2>
<c:url var="url" value="/livros/catalogo" >
<c:param name="Add" value="${idLivro}"/>
</c:url>
<a href="${url}">Adicionar livro ao carrinho</a>
</td>
</tr>
<tr>
<td bgcolor="#ffffff">
<em>${livro.autores} </em>
</td>
</tr>
</c:forEach>
</table>
</div>
Na linha 72, temos a criação de uma URL para a própria página de catálogo, passando o parâmetro Add com valor igual ao identificador do livro (idLivro) que o usuário tenha selecionado. Isso representa a adição desse item ao carrinho de compras. Muito bem! Finalmente chegamos ao uso do parâmetro Add. Ele é utilizado para indicar o livro que o usuário quer adicionar ao carrinho de compras. Essa operação é realizada adicionando-se o seguinte trecho de código ao Servlet controlador, logo após a linha 32 da classe ServletControladorLivraria mostrada na Listagem 2:
if (acaoSelecionada.equals("/livros/catalogo")) {
idLivro = request.getParameter("Add");
if (!idLivro.equals("")) {
try {
livro = livraria.getLivro(idLivro);
carrinho.adicionar(livro);
} catch (LivroNaoEncontradoException ex) {
// isso não deve acontecer
}
}
}
Esse código verifica se a ação selecionada (representada pela parte final da URL acessada) é igual a “/livros/catalogo” (parâmetros da requisição não entram aqui). Sendo o caso, pega-se o valor do parâmetro Add e, se ele não for vazio, busca-se o livro por meio do objeto livraria e o adiciona ao carrinho de compras. A busca do livro pode gerar uma exceção, o que não deve ocorrer normalmente, pois o código do livro é escrito no link de forma automática pelo sistema. Caso aconteça a exceção devido a um acesso indevido por um hacker, por exemplo, ela fará com que a operação de adição do livro no carrinho não ocorra, sem comprometer a geração da página de resposta.
Versão 5.3 - Todos os Direitos reservados