JSF Componentes Face Bean Navegação Validação JavaServer Faces Ciclo JSF Prof. Enzo Seraphim Exemplo JSF (JavaServer Faces) ▼ ▼ ▼ É uma especificação Java e não um produto proprietário – Especificado pelo JCP 252 Define um modelo de programação Orientado a componentes: – Que gera HTML – Componentes Reusáveis – Baseada em factories – Árvore de componentes (Composite) – Eventos do lado do servidor Objetivos ▼ ▼ ▼ ▼ ▼ ▼ ▼ ▼ Gerência de estados dos componentes; Tratamento de eventos; Validação; Conversão de dados; Mapeamento das navegações entre páginas; Internacionalização, entre outros. Simplificar o desenvolvimento Fácil de estender Papéis em aplicação JSF ▼ ▼ ▼ ▼ Autor de páginas: Criador das páginas utilizando as bibliotecas de tags do JSF; Desenvolvedor de aplicação: Criador de conversores, validadores, tratadores de eventos e backing beans; Autor de componentes: Criador de componentes e renderizadores; Arquiteto da aplicação: Configura toda a aplicação; Define regras de navegação entre páginas; Configura objetos (conversores, validadores, etc); Aplicação web JSF ▼ ▼ ▼ ▼ Conjunto de páginas JSP (apresentação): tags customizadas UI (user interface), para representar objetos em uma página; Conjunto de backing beans (JavaBeans): objetos definem propriedades e métodos; Conjunto de tags validadores, conversores, ou tratadores de eventos; Conjunto de navegação definidos para os backing beans em arquivo de configuração Backing Bean Página JSF Exemplo Aplicação JSF Validações, Conversores, Eventos TrocaBean - campo1: String - campo2: String + gets e sets... + inverte(): String Navegação welcomeJSF.jsp <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <f:view> <h:form> <html> <body> <fieldset> <legend>Troca Exemplo</legend> <label>Campo1: <h:inputText value="#{TrocaBean.campo1}" /> </label><br/> <label>Campo2: <h:inputText value="#{TrocaBean.campo2}" /> </label><br/> <h:commandButton value="inverte" action="#{TrocaBean.inverte}" /> </fieldset> </body> </html> </h:form> </f:view> Validação welcomeJSF.jsp <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> … <h:outputText value="campo1:" /> <h:inputText id="campo1" value="#{TrocaBean.campo1}"> <f:validateLength maximum="15" minimum="6"/> </h:inputText><br/> <h:outputText value="campo1:" /> <h:inputText id="campo2" value="#{TrocaBean.campo2}"> <f:validateLength maximum="15" minimum="6"/> </h:inputText> <h:commandButton id="inverte" action="#{TrocaBean.inverte}" value="inverte" /> ... Backing Bean Página JSF Exemplo Aplicação JSF Validações, Conversores, Eventos TrocaBean - campo1: String - campo2: String + gets e sets... + inverte(): String Navegação TrocaBean.java Exemplo de Bean @ManagedBean @RequestScoped public class TrocaBean { private String campo1; private String campo2; } //get e set … atributos com get e set usados na caixa de texto da Página JSF public String inverte() { String temp = campo1; campo1 = campo2; campo2 = temp; return "/welcomeJSF.jsp"; } método chamado por botão ou link que direciona a navegação para mesma página Execução Requisição feita para pagina gerada welcomeJSF.jsp componentes JSF web.xml Página JSF com JSP = faces/welcomeJSF.jsp Interpretada pelo Browser Página gerada ... <servlet­mapping> <servlet­name>Faces Servlet</servlet­name> <url­pattern>/faces/*</url­pattern> </servlet­mapping> ... JSF Componentes Face Bean Navegação Validação JavaServer Faces Ciclo JSF Prof. Enzo Seraphim Exemplo Core JavaServer Faces ▼ Contém tags JSF independentes da apresentação, tais como conversores e validadores. <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> f:view f:subview f:facet f:attribute f:param f:actionListener f:valueChangeListener f:setPropertyChangeListener f:converter f:convertDateTime f:convertNumber f:validator f:validateDoubleRange f:validateLength f:validateLongRange f:loadBundle f:selectitems f:selectitem f:verbatim Core JavaServer Faces ▼ <f:view> – Cria uma view JSF. – Container para todos os componentes usados na página – Cada página só pode ter uma única view; – Todos os componentes JavaServer Faces devem ser aninhados a este – 'Qualquer componente que fique fora pode gerar um erro. Core JavaServer Faces ▼ ▼ ▼ ▼ ▼ ▼ ▼ subview→Cria uma subview de uma view attribute → Define um atributo (chave/valor) ao componente pai mais próximo param → Permite definir parâmetros ao componente facet → Adiciona facet a um componente actionListener → Adiciona um action listener ao componente setPropertyActionListener → Adiciona action listener que define propriedade valueChangeListener → Adiciona um change Listerner de valor ao componente Core JavaServer Faces ▼ ▼ ▼ ▼ ▼ ▼ phaseListener → Adiciona um ouvidor de fases ao componente converter → Adiciona um conversor arbitrário ao componente convertDateTime → Adiciona um conversor de data e hora ao componente convertNumber → Adiciona um conversor de números ao componente validator → Adiciona um validador ao componente validateDoubleRange → Faz validação de uma faixa de valores ao double Core JavaServer Faces ▼ ▼ ▼ ▼ ▼ ▼ validateLength → Faz a validação do tamanho mínimo e máximo de caracteres do valor de um componente validateLongRange → Faz a validação de uma faixa de valores inteiros loadBundle → Carrega um arquivo de recursos e armazena as propriedades selectItems → Define os ítens para um componente select one ou select many selectItem → Define um ítem para um componente select one ou select many verbatim → Transforma texto contendo marcação em um componente UIComponent + HTML RenderKit Renderer ▼ Classes de componentes que geram como saída tags HTML <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> h:form h:inputText h:inputTextArea h:inputSecret h:inputHidden h:outputLabel h:outputLink h:outputFormat h:outputText h:commandButton h:commandLink h:message h:messages h:selectOneListbox h:selectOneMenu h:selectOneRadio h:selectBooleanCheckbox h:selectManyCheckbox h:selectManyListbox h:selectManyMenu h:panelGrid h:panelGroup h:dataTable h:column Tags JSF HTML ▼ ▼ ▼ ▼ ▼ ▼ ▼ h:form → Formulário HTML h:inputText → Entrada de uma linha de texto h:inputTextArea → Entrada de várias linhas de texto. h:inputSecret → Entrada de Texto para senha h:inputHidden → Campos Escondido h:outputLabel → Label para componente (acessibilidade) h:outputLink → Link em HTML. Tags JSF HTML ▼ ▼ ▼ ▼ ▼ ▼ h:outputFormat → Igual ao outputText, mas com formatação h:outputText → Saida de Texto única. h:commandButton → Botões formulário: submit, reset, or pushbutton. h:commandLink → Link que atua com o pushbutton. h:message → Mostra a mensagem mias recente para o componente. h:messages → Mostra todas mensagens Tags JSF HTML ▼ ▼ ▼ ▼ ▼ ▼ ▼ h:selectOneListbox → Lista de seleção única. h:selectOneMenu → Menu de seleção única h:selectOneRadio → Radio buttons. h:selectBooleanCheckbox → Checkbox. h:selectManyCheckbox → Lista de Checkboxes. h:selectManyListbox → Lista de seleção multiplas h:selectManyMenu → Menu com muiltiplas seleções. Tags JSF HTML ▼ ▼ ▼ ▼ h:panelGrid → tabela HTML h:panelGroup → Dois ou mais componentes que são definidos como um h:dataTable → Pode exibir objetos de uma coleção ou de um vetor. Cada objeto representa uma linha na tabela e as colunas correspondem variáveis de instância no objeto. h:column → Coluna em uma dataTable <h:form> UI ▼ Representa a tag form do HTML; Dentro do form, devem estar os componentes para entrada de dados, que serão posteriormente enviados <h:form> </h:form> HTML ▼ <form id="j_id_id16" name="j_id_id16" method="post" action="/WebApplication1/faces/welcomeJSF.jsp" enctype="application/x-www-form-urlencoded"> <input type="hidden" name="j_id_id16" value="j_id_id16" /> <input type="hidden" name="javax.faces.ViewState" id="javax.faces.ViewState" value="-9163228735902783129: -7151430677457024184" autocomplete="off" /> </form> <h:outputText> <h:inputText> UI ▼ OutputText → Rótulo texto InputText → Caixa de entrada de texto <h:form> <h:outputText value="digite aqui"/> <h:inputText value="#{bean.campo}"/> </h:form> <form ... HTML ▼ digite aqui <input type="text" name="j_id_id16:j_id_id20" /> ...</form> h:commandButton UI Define um botão com ação e a navegação. HTML ▼ <h:form> <h:outputText value="digite aqui"/> <h:inputText value="#{bean.campo}"/> <h:commandButton value="Cadastrar" action="#{bean.acao}" /> </h:form> ... <input type="submit" name="j_id_id16:j_id_id22" value="Cadastrar" /> ... Expressions Language ▼ ▼ ▼ #{bean.atributo} #{bean.método} Utilizada para acessar os backing beans: – bean: o nome do face bean; – atributo: a propriedade do bean acessada pelos métodos set/get. – método: método do bean que não recebe parâmetro e retorna string Exemplo EL <h:form> <h:outputText value="digite aqui"/> <h:inputText value="#{bean.campo}"/> <h:commandButton value="Cadastrar" action="#{bean.acao}" /> </h:form> ▼ ▼ componente inputText: – chamará o método getNome() quando a página for renderizada – chamará o método setNome() quando a página for submetida; componente commandButton: – chamará o método validar() quando a página for submetida Outros Componentes ▼ <h:inputSecret value="#{bean.campo}" /> ▼ <h:inputTextarea value="#{bean.campo}" /> h:outputLink + h:outputText <h:outputLink value="http://www.meusite.com"> <f:param name="user" value="ze" /> <f:param name="pwd" value="123" /> <h:outputText value="Login" /> </h:outputLink> <a href="http://www.meusite.com? user=ze&pwd=123" id="link1">Login</a> <h:selectOneMenu, Radio,ListBox> ▼ ▼ Representa uma caixa de seleção única – value → pode ser um atributo do bean f:selectItems permite manipular coleções (list, set, map,array) – value → coleção – var → nome de variavel para itemValue e itemLabel – ItemLabel → rótulo (visível na lista) – ItemValue → valor (passado para atributo) Exemplo h:selectOneMenu private String [] cores = {"branco","prata","vermelho","azul"}; private String cor = ""; //gets e sets ... UI } <h:selectOneMenu value="#{carroBean.cor}"> <f:selectItems value="#{carroBean.cores}"/> </h:selectOneMenu> HTML Carro.java public class Bean { <select id="cor" name="cor" size="1"> <option value="branco">branco</option> <option value="prata">prata</option> <option value="vermelho">vermelho</option> < option value="azul">azul</option> </select> ▼ ▼ <h:selectManyCheckBox, Menu,ListBox> Representa uma caixa de seleção única – value: pode ser um atributo do bean f:selectItems permite manipular coleções (list, set, map,array) – value → coleção – var → nome de variavel para itemValue e itemLabel – ItemLabel → rótulo (visível na lista) – ItemValue → valor (passado para atributo) HTML UI Carro.java Exemplo h:selectOneMenu public class Bean { private String [] cores = {"branco","prata","vermelho","azul"}; private List<String> variasCores = new ArrayList<String>(); //gets e sets ... } <h:selectManyMenu value="#{carroBean.variasCores}"> <f:selectItems value="#{carroBean.cores}" </h:selectOneMenu> ... <input name="cor" id="cor:0" value=";@7683b1" type="checkbox"/><label for="cor:0" class=""> branco</label> <input name="cor" id="cor:1" value=";@7683b1" type="checkbox"/><label for="cor:1" class=""> prata</label> ... Internacionalização ▼ ▼ Um recurso muito poderoso do JSF é a internacionalização muito fácil de utilizar As mensagens ficam gravadas em arquivo de recursos chamado de Resource Bundle; – Arquivo de extensão .properties. – Pacote próprio na aplicação – Exemplo de nomes de arquivos: Mensagens_pt_BR e Mensagens_en_US pt_BR.porpeties informe=Informe seu Nome naoVazio=Nome não pode estar vazio. ok=OK ola=Olá ingles=English portugues=Português pt_BR.porpeties Arquivos .properties informe=Enter your name naoVazio=Name cannot be null. ok=OK ola=Hello ingles=English portugues=Português ResourceBundle ▼ ▼ ▼ Tag application: Configurações gerais da aplicação; Tag resource-bundle: Configurações de um resource bundle; Tag base-name: nome base arq.recurso. Tag var: variável visível nas páginas JSP. faces-config.xml ▼ <application> <resource­bundle> <base­name>mensagem.Mensagens</base­name> <var>msg</var> </resource­bundle> <locale­config> <default­locale>pt_BR</default­locale> <supported­locale>en_US</supported­locale> <supported­locale>pt_BR</supported­locale> </locale­config> </application> ResourceBundle ▼ ▼ Tag locale-config: configura os idiomas que podem ser usados na aplicação; Tag default-locale: língua padrão da aplicação; Tag supported-locale: indica os idiomas suportados pela aplicação. faces-config.xml ▼ <application> <resource­bundle> <base­name>mensagem.Mensagens</base­name> <var>msg</var> </resource­bundle> <locale­config> <default­locale>pt_BR</default­locale> <supported­locale>en_US</supported­locale> <supported­locale>pt_BR</supported­locale> </locale­config> </application> <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> <f:view> <html> <body> <h:form> <h:outputLabel for="itNome" value="#{msg.informe}"/> <h:inputText id="itNome" value="#{nomeBean.nome}" required="true" requiredMessage="#{msg.naoVazio}"/> <h:message for="itNome"/><br/> <h:commandButton id="ok" action="mensagem" value="#{msg.ok}" /> </h:form> </body> </html> </f:view> ... <h:outputText value="#{mensagens.ola}, #{nomeBean.nome}"/> ... JSF Componentes Face Bean Navegação Validação JavaServer Faces Ciclo JSF Prof. Enzo Seraphim Exemplo O que é ? Bean.java Atributos acessados pela Expressions Language da página JSF Métodos invocados pela página JSF Exemplo de Bean EquacaoQuadratica - a: float - b: float - c: float - delta: float + gets e sets... + calcDelta(): String @ManagedBean @RequestScoped Faces Annotations public class EquacaoQuadratica { Bean.java private private private private float float float float a; b; b; delta; //get e set … public String calcDelta() { delta = b*b – 4*a*c; return "/welcomeJSF.jsp"; } } atributos com get e set usados na caixa de texto da Página JSF método chamado por botão ou link que direciona a navegação para mesma página Managed Bean ▼ Classes java que a principal responsabilidade é intermediar a comunicação entre as páginas (componentes do JSF) e nosso modelo: import javax.faces.bean.ManagedBean; @ManagedBean ▼ Algumas responsabilidades são: – Escutar eventos, processa-los e delegar para a camada de negócios Escopo Faces ▼ ▼ ▼ Um escopo dá um objeto num contexto de ciclo de vida bem definido. Um objeto de escopo podem ser criados automaticamente quando ela é necessária e automaticamente destruídas quando o contexto no qual ele foi criado finalizar. Seu estado é automaticamente compartilhada por todos os clientes que executam no mesmo contexto. Escopo Faces ▼ ▼ @RequestScoped → Estado do Bean renovado em a cada interação do usuário com uma aplicação web (uma única solicitação HTTP ao Bean). Instanciação do Bean para toda requisição HTTP @SessionScoped → Estado do Bean compartilhado em várias solicitação HTTP A interação do usuário com uma aplicação web em várias solicitações HTTP. Escopo Faces ▼ ▼ @ApplicationScoped → Estado do Bean compartilhado entre todas as interações dos usuários com uma aplicação web. Uma única instanciação do Bean a partir da instanciação @ViewScoped → Estado do Bean compartilhado compartilhado enquanto não for requisitado a mesma página JSF. Uma única instanciação do Bean até que seja requisitada outra página. JSF Componentes Face Bean Navegação Validação JavaServer Faces Ciclo JSF Prof. Enzo Seraphim Exemplo Navegação de Páginas ▼ A navegação de páginas em JSF é baseado em regras de navegação: – Método do Managed Bean → não contém parâmentros e que retorna String define direção da navegação – faces-config.xml → Navegação condicionada ao retorno do método do bean faces-config.xml Classe Troca.java Método do Managed Bean public class Troca { private String campo1; private String campo2; //gets e sets ... public String inverte() { String temp = campo1; campo1 = campo2; campo2 = temp; return "sucesso"; } } <!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN" "http://java.sun.com/dtd/web-facesconfig_1_1.dtd"> <faces-config> <managed-bean> <managed-bean-name>TrocaBean</managed-bean-name> <managed-bean-class>Troca</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> </faces-config> faces-config.xml Navegação condicionada ao retorno do método do bean faces-config.xml ▼ <faces-config> <!-- ... --> <navigation-rule> <description></description> <from-view-id>/troca.jsp</from-view-id> <navigation-case> <description></description> <from-outcome>sucesso</from-outcome> <to-view-id>/trocaSucesso.jsp</to-view-id> </navigation-case> </navigation-rule> <!-- ... --> </faces-config> JSF Componentes Face Bean Navegação Validação JavaServer Faces Ciclo JSF Prof. Enzo Seraphim Exemplo Validação e Converção ▼ ▼ Validação e Tratamento de Erros – JSF torna fácil a inclusão de validações como: “valor requerido”, “valor deve ser inteiro” – Ao entrar com dados inválidos, faz-se necessário mostrar os dados errados – JSF trata da maior parte da tarefa tediosa de converter dados e validar/tratar erros Conversão de Dados – Usuários entram dados em formato String – Objetos de negócio necessitam de Strings, inteiros, decimais e datas – JSF faz a conversão automática dos dados Validações ▼ ▼ ▼ ▼ Validação Manual – Métodos sets e gets Validação Automática Implícita – Adiciona required na entrada – Usar h:message para informar erros Validação automática explícita – f:convertNumber, f:convertDateTme, f:validateLength,f:validateDoubleRang e, f:validateLongRange Validadores customizáveis – Herdam Validador, sobrescrevem o validate e são registrados no faces-config.xml Validação Implícita <h:form> Cor: <h:inputText value="#{carroBean.cor}" required="true" requiredMessage= "não pode ser vazio" id="cor"/> <h:message for="cor" /><br /> <h:commandButton id="conectar" action="teste.jsf" value="Conectar"/> </h:form> ▼ <h:message for="campo1"/> – Impressão de mensagens – for: O id do campo do qual deseja-se mostrar uma mensagem, possivelmente de erro Validação explícita ▼ Suporte validação de campos de entrada de forma declarativa <h:inputText … > <f:validate... ... \> </h:inputText> ▼ Exemplos de validação: <f:validateLongRange maximum="30" minimum="15"/> <f:validateLength maximum="15" minimum="6"/> <f:validateDoubleRange minimum="20.00" maximum="1000.00" /> Exemplo de Validação <%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%> <%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%> … <label>Campo1: <h:inputText id="campo1" value="#{TrocaBean.campo1}"> <f:validateLength maximum="15" minimum="6"/> </h:inputText> </label><br/> <label>Campo2: <h:inputText id="campo2" value="#{TrocaBean.campo2}"> <f:validateLength maximum="15" minimum="6"/> </h:inputText> </label><br/> <h:commandButton id="inverte" action="#{TrocaBean.inverte}" value="inverte" /> ... Converções BigDecimalConverter DoubleConverter BigIntegerConverter FloatConverter BooleanConverter IntegerConverter ByteConverter LongConverter CharacterConverter NumberConverter DateTimeConverter ShortConverte <h:outputText value="#{bean.date}"> <f:convertDateTime dateStyle="full" /> </h:outputText> <h:outputText value="#{bean.soma}" > <f:convertNumber type="currency" </h:outputText> JSF Componentes Face Bean Navegação Validação JavaServer Faces Ciclo JSF Prof. Enzo Seraphim Exemplo Interação cliente aplicação web Request/ Requisição Retaurar Visão Aplicar Valores Requisitados Processar Validações Response/ Resposta Renderizar Resposta Invocar Aplicação Atualizar Valores Bean ▼ ▼ ▼ Esta fase inicia o processamento da requisição do ciclo de vida por meio da construção da árvore de componentes do JSF. Cada árvore de componentes possui um identificador único durante todo o aplicativo. O JSF constrói a apresentação da página e salva na instância FacesContext para processamento das fases seguintes. Request/ Requisição Retaurar Visão Aplicar Valores Requisitados Processar Validações Response/ Resposta Renderizar Resposta Invocar Aplicação Atualizar Valores Bean ▼ Nesta fase, quaisquer novos valores inseridos são extraídos e armazenados por seus apropriados componentes. Se o valor do componente não for uma String, então ele é convertido para o seu determinado tipo. Se a conversão falhar, ocorrem diversas situações: – Uma mensagem de erro é gerada e associada com o componente; – Uma mensagem de erro é armazenada no FacesContext que depois será mostrada pelas fases posteriores Request/ Requisição Retaurar Visão Aplicar Valores Requisitados Processar Validações Response/ Resposta Renderizar Resposta Invocar Aplicação Atualizar Valores Bean ▼ ▼ ▼ Nesta fase de processo de validações, os componentes serão validados Um componente que necessita de validação deve fornecer a implementação da lógica de validação. Por exemplo, na idade podemos determinar um valor mínimo e máximo a ser digitado. O valor requisitado é um inteiro (verificado na fase anterior) e, como passou pela fase 2, nessa fase pode ser barrado por estar além do determinado (com uma idade mínima ou máxima diferente da estipulada). Request/ Requisição Retaurar Visão Aplicar Valores Requisitados Processar Validações Response/ Resposta Renderizar Resposta Invocar Aplicação Atualizar Valores Bean ▼ ▼ ▼ Nesta fase são atualizados os dados do modelo do aplicativo. Durante esta fase a informação digitada é armazenada no Managed Bean . Por ter passado pelo processo de validação, temos garantias que o valor armazenado será garantido nessa fase. Entretanto, os dados podem violar a lógica de negócios, ao qual a validação ocorre na fase seguinte. Request/ Requisição Retaurar Visão Aplicar Valores Requisitados Processar Validações Response/ Resposta Renderizar Resposta Invocar Aplicação Atualizar Valores Bean ▼ ▼ Durante esta fase, a implementação JSF manipula quaisquer eventos do aplicativo, tal como enviar um formulário ou ir a outra página através de um link. Estes eventos são ações que retornam geralmente uma string que está associada a uma navegação no qual se encarrega de chamar a página. Request/ Requisição Retaurar Visão Aplicar Valores Requisitados Processar Validações Response/ Resposta Renderizar Resposta Invocar Aplicação Atualizar Valores Bean ▼ ▼ ▼ Esta é a fase final, ao qual é renderizada a página. Se este é um pedido inicial para esta página, os componentes são acrescentados à apresentação neste momento. Se este é um postback, os componentes já foram acrescidos à apresentação. Se há mensagens de conversão ou erros de validação e a página contém um ou mais componentes <mensage /> ou um componente <messages />, estes serão exibidos. Conceitos importantes ▼ ▼ ▼ ▼ View → Uma página JSP que é requisitada em JSF. Component Tree → Uma View em JSF é árvore de componentes, tais como o form, as inputTexts, botões e links. Esses objetos são organizados em uma árvore, com base na hierarquia da página HTML. View Root → Cada árvore de componentes está enraizada a um objeto UIViewRoot. View Identifier → Cada View de componente de árvore tem um ID único. Quando utilizando JSPs e mapeamento de prefixo, esta é a parte da URL entre o prefixo e a seqüência de consulta. URL= http://localhost/myapp/faces/admin/usuario.jsf ID=/admin/usuario.jsp Conceitos importantes ▼ ▼ ▼ Identificador de Componente → Este é o valor atribuído ao atributo id para a tag de um componente. O id do componente deve ser único no seu contêiner de nomeação. Caso contrário a exceção duplicate id é lançada. Nomeação do contêiner → Um contêiner serve como um espaço para os componentes. Identificador de cliente → É identificador de um componente no cliente que é composto por nomes de recipiente id e id do componente, delimitado por dois pontos. Conceitos importantes ▼ ▼ ▼ ▼ Faces Context → descreve o ambiente de execução da requisição em andamento. Define ou recuperar a raiz da View atual afetando assim a View que será exibida para o usuário Converter → Converte o valor String na entrada do componente que apresentou o valor do atributo para o tipo de dados apropriado para o componente de valor presente. Validator → Aplica-se a regras de validação o valor convertido para um componente. FacesMessage → Representa uma mensagem que precisa ser exibido para o usuário. O FacesContext mantém uma fila de mensagem que contém as mensagens de uma determinada visão. JSF Componentes Face Bean Navegação Validação JavaServer Faces Ciclo JSF Prof. Enzo Seraphim Exemplo Diretório Projeto Netbeans raiz setup web web-inf src páginas conf test java .jsp, .html classes web.xml lib classes tags sun-web.xml Bibliotecas .jar Classes .class Arquivos .tag .java br.edu.unifei.ecoe07.controle.faces ClienteBean LocacaoBean FilmeBean :EntityManager :ClienteDao :Cliente :EntityManager :LocacaoDao/:Locacao :FilmeDao/:Filme :ClienteDao/:Cliente :EntityManager :FilmeDao :Filme br.edu.unifei.ecoe07.modelo FonteDados ClienteDao LocacaoDao FilmeDao crud crud crud br.edu.unifei.ecoe07.controle.dao Cliente -login:String -cpf:String -nome:String * Locacao -id:int -locacao:Calendar -devolucao:Calendar 1 Filme -codigo:int -nome:String Os logotipos, marcas comerciais e nomes de produtos citados nesta publicação tem apenas o propósitos de identificação e podem ser marcas registradas de suas respectivas companhias. JavaServer Faces Prof. Enzo Seraphim