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 escopopagerequest.removeAttribute("nomeBean");para escoporequestsession.removeAttribute("nomeBean");para escoposessionapplication.removeAttribute("nomeBean");para escopoapplication