O documento descreve os principais conceitos do JavaServer Faces (JSF), incluindo: (1) os componentes principais do JSF como FacesServlet e managed beans; (2) as fases do ciclo de vida do JSF; e (3) técnicas como validação de dados e escopos de beans.
1. 2/3/2011
Camada de Visão
Camada de Controle
Prof. Italberto F. Dantas
italberto@gmail.com
Um servlet controlador chamado FacesServlet Fornece taglibs para exibir a interface com o
◦ Configurado no arquivo web.xml
web.xml usuário através de:
◦ Um conjunto de componentes
◦ Não é editável pelo desenvolvedor
◦ Uma API padronizada para acesso e manipulação de dados
Um arquivo de configuração XML chamado da camada de controle
faces-config.
faces-config.xml Podemos usar pelo menos duas tecnologias
◦ Registrara beans, formas de navegação de visão:
◦ JSF 2.0 minimizou a necessidade de seu uso ◦ JSP
Manipuladores de ações: managed beans ◦ Facelets
◦ Fazem acesso à camada de modelo
◦ Seus métodos devolvem strings para que o
FacesServlet faça a navegação: redirecionamentos
1
2. 2/3/2011
• Análoga à EL JSP 2.0
– Forma de uso: #{identificador}
Um formulário é requisitado
• Pode ser usada em páginas e também no faces-config.xml ◦ Um managed bean é instanciado (caso não
para injeção de dependência exista), por padrão, no escopo do request
• Permite acesso simplificado às propriedades de um bean:
◦ Tag Handlers colaboram uns com os outros para
– #{agendaBean.contatos}, #{agendaBean.contato.nome},
• Permite "executar" métodos também: formar uma árvore de componentes
– #{loginControlador.autenticar}, ◦ Os componentes são renderizados e preenchidos
#{palpiteControlador.gerarNovoNumero,
com dados de um managed bean
• Similaridades com JSP EL:
– Permite acesso a objetos implícitos de escopo: session, ◦ A página codificada é então enviado ao cliente.
request, application
– Acesso simples a coleções
– Suporte aos operadores básicos (or, and, eq, lt, gt...)
O formulário é enviado O método de ação é executado
◦ A priori, os dados são enviados para a própria ◦ Esse método é invocado por componentes como
página commandButton ou commandLink
◦ As propriedades dos managed beans são O método ação retorna uma “condição”
preenchidas com o conteúdo dos componentes ◦ A string pode ser um mapeamento faces-
faces-
◦ Caso haja mudança na navegação, o usuário é config.
config.xml ou o nome de uma página (sem a
encaminhado para outra página extensão) faces-config.xml
faces-config.
Uma página de resultados é exibida
2
3. 2/3/2011
O FacesServlet extrai da requisição o "view
ID", que é determinado pelo nome da página.
Uma árvore de componentes é mantida pelo
framework representando o estado da visão:
O estado pode ser mantido no cliente ou no
servidor:
◦ Cliente: menor consumo de memória e maior tráfego de
rede
◦ Servidor: maior consumo de memória e menor tráfego de
rede)
Cada componente deverá recuperar seu Cada componente (propriedade “value”) será
estado corrente. validado de acordo com as regras de
Os valores dos componentes são extraídos do validação definidas na aplicação
request, cookies, sessão ou do “header” da As regras de validação são definidas através
dos “validators”
requisição
Caso haja problemas de validação mensagens
Essa atribuição é feita utilizando o conversor de erro são adicionadas no FacesContext e o
definido para o componente componente é marcado como inválido
Se um componente for marcado como
inválido, o JSF pula para a fase “Render
Response”
3
4. 2/3/2011
Os valores dos componentes são passados O FacesServlet executa chama o método do
para as propriedades associadas aos Managed Bean associado no submit/link,
Managed Beans Todos os valores já foram validados e
Caso seja necessário, os Managed Beans são carregados nas fases anteriores
instanciados e mantidos no seu respectivo Métodos ou outcomes carregados na
escopo propriedade “action dos componentes
action”
action
Pode haver erro na conversão, fazendo com
que o JSF dispare um erro de tempo de
execução
Monta-se a resposta onde cada componente No cabeçalho de cada componente visual da
é processado e o resultado é unificado aos página deve ser declarado as taglibs que
demais serão usadas naquele trecho de código.
A visão então é exibida ao usuário
4
5. 2/3/2011
h:inputText Tarefa obrigatória para qualquer aplicação
h:commandButton Alguns tipos de validação:
h:commandLink ◦ Campos obrigatórios preenchidos
h:dataTable ◦ Formatos e tamanhos de tipos básicos como real e
inteiro corretos
h:panelGrid ◦ Tipos de dados mais específicos como dígitos
h:outputLink verificadores (CPF, CNPJ, Matrícula) corretamente
h:outputLabel gerados/fornecidos
h:form
Para campos obrigatórios, o JSF provê o Podemos escrever métodos ou classes
atributo required próprios para validar os dados dos
Para validações básicas (domínio e tamanho), formulários.
o JSF possui validadores pré-definidos Há duas maneiras de implementar validação
personalizada
Criar uma classe e implementar a interface
javax.faces.validator.Validator
Usar um método do managed bean para
validação
5
6. 2/3/2011
Usando o método do managed bean
Caso seja escolhido essa forma de validação,
o método deve ter a seguinte assinatura.
JavaBeans Validation (Bean Validation) é um
novo modelo de validação parte da
plataforma Java EE6
Suportado através de anotações.
6
7. 2/3/2011
Anotação Descrição Exemplo
@AssertFalse O valor do campo deve @AssertFalse boolean
ser falso. isUsuario;
@AssertTrue O valor do campo deve @AssertTrue boolean
ser verdadeiro. isAtivo;
@Digits O valor deve estar entre @Digits(integer=6,
uma faixa de valores. fraction=2) BigDecimal
price;
@Pattern O valor deve reconhecido @Pattern(regexp=“.+@.+
por uma expressão .[a-z]+") String email;
regular.
@NotNull O valor do campo não @NotNull String nome;
pode ser nulo.
Existem três tipos de escopo de execução nas Application
aplicações web: ◦ O bean que é definido como sendo
◦ Application @ApplicationScopped poderá ser visto por toda a
◦ Session apliação da mesma forma. Ou seja visto por vários
◦ Request usuários do mesmo sistema em máquinas
diferentes.
O JSF 2 definiu mais um tipo ◦ Não é recomendável em formulários.
◦ View
7
8. 2/3/2011
Session Request
◦ Um managed bean definido como @SessionScopped ◦ Este é o escopo padrão utilizado pelo JSF.
poderá ser visto durante toda a execução do ◦ Um managed definido como @RequestScopped terá
sistema por um único usuário (enquanto sua sessão seus dádos válidos apenas durante a comuncação
não expira). entre o cliente (browser) e o servidor (GlassFish,
◦ É usado para guardar informações úteis ao usuário TomCat, etc)
durante a execução do sistema.
8