Cursos / Informática para Internet / Desenvolvimento Web I / Aula

arrow_back Aula 07 - Introdução ao JSTL

Suporte a variáveis

O próximo conjunto de funcionalidades da taglib core que veremos é o suporte a variáveis. Com esse conjunto de tags, podemos definir e remover variáveis dentro do escopo da requisição JSP que está sendo processada. Existem duas tags que são responsáveis por esse suporte: <c:remove> e <c:set>. Comecemos pela tag c:set!

A tag c:set permite que sejam definidas variáveis que não existiam no escopo da requisição JSP, à medida que essa página é processada. Essa tag tem o comportamento similar à diretiva <jsp:setProperty ... />, entretanto, ela pode definir variáveis tanto de JavaBeans quanto em variáveis de qualquer escopo da página JSP (página, requisição, sessão e aplicação). Existem duas formas de informar à tag qual o valor que ela deve armazenar. A primeira é usando o atributo value. A segunda é definindo o corpo dessa tag. Ambas as formas são mostradas nas Listagens 5 e 6, respectivamente.

Listagem 5 - Código JSP que usa o atributo value para definir o valor da variável userLevel Listagem 6 - Código JSP que usa o body da tag como valor para a variável userLevel

Adicionalmente, o atributo value pode ser uma expressão, assim como na tag c:out. Entretanto, se a avaliação dessa expressão resultar num valor nulo, a variável será removida do escopo.

Uma vez que explicamos a funcionalidade dessa tag, vamos agora mostrar e explicar cada um dos seus atributos.

Atributo Descrição Obrigatório Valor default
value Valor ou expressão a ser armazenado na variável definida pelo atributo var Não Texto contido no Body da tag
target Nome da variável que será modificada Não
property Nome da propriedade do objeto definido pelo atributo target que será modificado Não
var Nome da variável onde será armazenado o valor definido pelo atributo value Não
scope Escopo da variável (Página, Requisição, Sessão ou Aplicação) Não
Quadro 5 - Atributos da tag c:set

Aqui precisamos diferenciar dois atributos, que são var e target. O atributo var é para definir variáveis no escopo da página, requisição, sessão e aplicação, enquanto que o atributo target define valores para propriedades em beans que estejam definidos em algum escopo. Quando usarmos var, não podemos usar target e vice-versa. Para ficar mais claro, veja os exemplos a seguir.

Definimos uma classe Pessoa que possui os atributos id e nome.

 Código da classe Pessoa

Alteramos o servlet de exemplo para listar pessoas ao invés de filmes.

 Método doGet() do Servlet listando pessoas

Nesse JSP definimos uma variável com o nome de id cujo valor será o id + 1 e, logo em seguida, esse id será exibido na página juntamente com o nome da pessoa. Como estamos dentro de um loop, a cada iteração esse id será incrementado e o novo valor atribuído à variável id.

Código JSP responsável por gerar o HTML com a lista de pessoas

Por fim, vamos alterar diretamente o atributo id da classe pessoa dentro de cada iteração. Para isso, precisamos definir qual o objeto terá a sua propriedade modificada. Nesse exemplo, usaremos um recurso da taglib de loop chamado de forEach, que veremos mais adiante, que guarda em uma variável o contador da iteração. Perceba que para cada instância de pessoa que está sendo iterada, o valor do seu atributo id está sendo modificado com o contador da iteração + 1.

Aqui vale ressaltar que o atributo target recebe uma expressão que deve ser avaliada para um objeto; caso utilizássemos apenas “pessoa” ao invés de “${pessoa}” a tag entenderia “pessoa” como uma string e tentaria definir o valor de status + 1 numa propriedade id que não existe na classe String, o que causaria um erro em tempo de execução. Perceba, então, que para o atributo target devemos usar uma expressão que resulte em um objeto, e não apenas o identificador do objeto no escopo, como mostrado a seguir.

 Código JSP alterado, responsável por gerar o HTML com a lista de pessoas.

Por último, o atributo scope define em qual escopo a variável será armazenada, ou seja, no escopo da página, requisição, sessão ou aplicação. Quando esse atributo não é definido, o escopo utilizado pela tag é o da página.

Versão 5.3 - Todos os Direitos reservados