Utilização de JavaBeans em JSP: Escopos e Manipulação de Propriedades

Introdução ao Componente JavaBean em JSP

Em páginas JSP, o componente JavaBean é utilizado para encapsular dados e lógica de negócios. A tag <jsp:useBean> é usada para instanciar um objeto JavaBean.

<jsp:useBean id="nomeObjeto" scope="escopo" class="nomeCompletoClasse" />

O atributo scope pode ser page, request, session ou application, com page como padrão.

Exemplo de Classe Java

Considere a classe Pessoa no pacote com.exemplo.modelo:

package com.exemplo.modelo;

public class Pessoa {
    private String nome;
    private int idade;

    public String getNome() {
        return nome;
    }
    public void setNome(String nome) {
        this.nome = nome;
    }
    public int getIdade() {
        return idade;
    }
    public void setIdade(int idade) {
        this.idade = idade;
    }
}

Formulário de Envio e Tratamento Tradicional em JSP

Um formulário HTML envia dados para uma página JSP. No exemplo abaixo, os campos nome e idade são enviados via POST.

<body>
<form action="processaDados.jsp" method="post">
<table>
    <tr>
        <td>Nome:</td>
        <td><input type="text" name="nome"/></td>
    </tr>
    <tr>
        <td>Idade:</td>
        <td><input type="text" name="idade"/></td>
    </tr>
    <tr>
        <td colspan="2"><input type="submit" value="Enviar"/></td>
    </tr>
</table>
</form>
</body>

Tratamento Convencional sem JavaBean

No JSP processaDados.jsp, os parâmetros são recuperados manualmente e atribuídos ao objeto.

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%@ page import="com.exemplo.modelo.Pessoa" %>
<html>
<head>
<title>Resultado</title>
</head>
<body>
<%
    request.setCharacterEncoding("utf-8");
    String nomeRecebido = request.getParameter("nome");
    String idadeRecebida = request.getParameter("idade");
    Pessoa pessoa = new Pessoa();
    pessoa.setNome(nomeRecebido);
    pessoa.setIdade(Integer.parseInt(idadeRecebida));
%>
<h2>Nome: <%=pessoa.getNome()%></h2>
<h2>Idade: <%=pessoa.getIdade()%></h2>
</body>
</html>

Uso de JavaBeans para Simplificar o Proceso

Com JavaBeans, a página JSP pode instanciar o bean e configurar suas propriedades diretamente.

<body>
<%
    request.setCharacterEncoding("utf-8");
%>
<jsp:useBean id="pessoa" scope="page" class="com.exemplo.modelo.Pessoa"/>
<!-- 
    1. Se os nomes dos parâmetros coincidem com as propriedades do bean, use property="*"
    2. Para nomes divergentes, especifique com param="nomeParametro"
    3. Defina um valor fixo com value="valorFixo"
-->
<jsp:setProperty property="nome" name="pessoa" param="nomeParametro"/>
<jsp:setProperty property="idade" name="pessoa" value="30"/>
<h2>Nome: <%=pessoa.getNome()%></h2>
<h2>Idade: <%=pessoa.getIdade()%></h2>
</body>

Obtendo Propriedades com jsp:getProperty

A tag <jsp:getProperty> acessa propriedades de um JavaBean instanciado.

<jsp:getProperty property="nomePropriedade" name="nomeObjeto" />

Exemplo: Defina propriedades em uma página, faça um encaminhamento interno e recupere os valores em outra página. Configurando o escopo como request:

<!-- Na página origem -->
<body>
<jsp:useBean id="pessoa" scope="request" class="com.exemplo.modelo.Pessoa"/>
<jsp:setProperty property="nome" name="pessoa" value="Maria"/>
<jsp:setProperty property="idade" name="pessoa" value="25"/>
<jsp:forward page="destino.jsp"/>
</body>

<!-- Na página destino.jsp -->
<body>
<jsp:useBean id="pessoa" scope="request" class="com.exemplo.modelo.Pessoa"/>
<h2>Nome: <jsp:getProperty property="nome" name="pessoa"/></h2>
<h2>Idade: <jsp:getProperty property="idade" name="pessoa"/></h2>
</body>

Escopos de Salvamento de JavaBeans

O atributo scope determina onde o bean é armazenado. Por exemplo, para o escopo session:

<!-- Configurando no bean na sessão -->
<body>
<jsp:useBean id="pessoa" scope="session" class="com.exemplo.modelo.Pessoa"/>
<jsp:setProperty property="nome" name="pessoa" value="João"/>
<jsp:setProperty property="idade" name="pessoa" value="40"/>
<p>Dados da sessão configurados.</p>
</body>

<!-- Recuperando de outra página com escopo session -->
<body>
<h2>Recuperando da Sessão</h2>
<jsp:useBean id="pessoa" scope="session" class="com.exemplo.modelo.Pessoa"/>
<h2>Nome: <jsp:getProperty property="nome" name="pessoa"/></h2>
<h2>Idade: <jsp:getProperty property="idade" name="pessoa"/></h2>
</body>

O mesmo princípio se aplica ao escopo application.

Remoção de JavaBeans

Para remover um bean do escopo, utilize os métodos apropriados do objeto implícito correspondente:

  • pageContext.removeAttribute("nomeBean"); para escopo page
  • request.removeAttribute("nomeBean"); para escopo request
  • session.removeAttribute("nomeBean"); para escopo session
  • application.removeAttribute("nomeBean"); para escopo application

Tags: jsp javabeans java servlet escopo

Publicado em 6-11 18:52 por Thomas