Escolar Documentos
Profissional Documentos
Cultura Documentos
), a passagem de parmetros
e a navegao feita essencialmente usando o mtodo POST do protocolo HTTP. Por esta
razo, neste caso desrecomendvel usar o atributo ID que est sendo passado pela URL.
Nestes casos, a melhor opo manter o padro do framework que, nesta situao a partir
dos atributos dos prprios managed beans.
Sendo assim, para popular um formulrio com os atributos de um bean, voc deve seguir o
procedimento que irei descrever abaixo para voc.
1. Crie o seu managed bean como se fosse um POJO (Plain Old Java Object) comum. Declare na
sua classe os atributos que iro corresponder aos campos do seu formulrio. Para ilustrar a
situao, vou usar um exemplo bastante simples: um formulrio de cadastro de contatos. Nele
teremos apenas dois atributos: nome e login. E um nico mtodo para cadastro, que chamarei
de cadastro, tal como no cdigo fonte abaixo:
class CadastroContatos {
private String nome;
private String email;
2. Este managed bean deve ser declarado no arquivo faces-config.xml, que se encontra dentro
do diretrio WEB-INF do seu projeto, tal como no exemplo abaixo:
<managed-bean>
<managed-bean-name>cadastroContato</managed-bean-name>
<managed-bean-class>seupacote.CadastroContatos</managed-bean-class>
<managed-bean-context>request</managed-bean-request/>
</managed-bean>
<navigation-case>
<from-outcome>cadastro_ok</from-outcome>
<to-view-id>cadastro_ok.jsp</to-view-id>
</navigation-case>
3. Na nossa view, iremos ter um formulrio para cadastro de contatos tal como o abaixo:
<h:form>
Nome: <h:inputText value="#{cadastroContato.nome}"/><br/>
E-mail: <h:inputText value="#{cadastroContato.email}"/><br/>
<h:commandButton value="Incluir" action="#{cadastroContato.cadastrar}"/>
</h:form>
Muita ateno neste terceiro ponto, pois nele que seu problema ser resolvido. O que
ocorre: neste ponto, o JSF ir fazer o link entre as propriedades nome e email do seu managed
bean cadastroContato. Para tal, o framework ir usar o padro Javabeans, ou seja, ir, no
momento de renderizao do formulrio, chamar os getters da classe CadastroContato e, no
momento de submisso do formulrio, chamar os mtodos set relacionados s propriedades.
Sendo assim, se algo der errado neste ponto, as possveis fontes de erro so as seguintes:
* Algum setter ou getter que est mal escrito
* Alguma varivel que no foi definida corretamente e pode levar a um NullPointerException.
Isto muito comum ocorrer em managed beans nos quais uma propriedade no aponte para
um atributo simples como uma String ou tipo primitivo, mas sim a uma outra classe. Nesta
situao, voc dever trabalhar no interior do seu bean para evitar a ocorrncia deste tipo de
problema, seja atravs de testes internos que verifiquem a nulidade dos atributos ou atravs
da construo do managed-bean.
Um exemplo de managed-bean que poderia apresentar este tipo de problema o abaixo:
suponha que exista uma classe chamada Contato, presente em uma verso alternativa do
bean CadastroCOntato que apresentei acima. Esta classe contato possui apenas dois atributos:
nome e e-mail. Esta segunda verso do Managed bean poderia ser escrita tal como no
exemplo abaixo:
class CadastroContato2 {
private Contato contato;
Repare que h um erro neste managed bean: ele no verifica a nulidade do atributo contato.
Ele simplesmente chama os mtodos da classe sem que este tenha sequer sido instanciado.
Este problema pode ser resolvido de trs modos bastante simples:
1. Criando um getter para o atributo contato que antes verifique se o atributo est nulo.
Estando nulo, cria uma nova instncia deste.
A partir dai, sua view ainda estaria acessando as propriedades nome e email do bean. A
diferena que, internamente, estaria diligenciando o acesso a uma outra classe.
Marcos, este um exemplo bastante simples, mas acredito que com ele eu tenha te exposto
como usar e passar atributos para managed beans usando o JSF. A segunda verso do
CadstroContato ilustra bem como podemos ir alm do acesso direto aos atributos.