Cursos / Informática para Internet / Desenvolvimento Web I / Aula
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 userLevelAdicionalmente, 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 |
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.
Alteramos o servlet de exemplo para listar pessoas ao invés de filmes.
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.
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.
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