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/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
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
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
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
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
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
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

Fundamentos jsf

  • 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 doscomponentes 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étododo 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