Post on 13-Nov-2018
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);
▼ 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
Aplicação web JSF
Exemplo Aplicação JSF
Validações, Conversores, Eventos
Navegação
TrocaBean
- campo1: String- campo2: String
+ gets e sets...+ inverte(): String
Pág
ina
JSF
Bac
kin
g B
ean
<%@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>
wel
com
eJS
F.js
p
<%@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" />...
Validação
welcomeJSF.jsp
Exemplo Aplicação JSF
Validações, Conversores, Eventos
Navegação
TrocaBean
- campo1: String- campo2: String
+ gets e sets...+ inverte(): StringB
ack
ing
Bea
nP
ágin
a JS
F
@ManagedBean@RequestScopedpublic class TrocaBean { private String campo1; private String campo2;
//get e set …
public String inverte() { String temp = campo1; campo1 = campo2; campo2 = temp; return "/welcomeJSF.jsp"; }}
Tro
caB
ean
.jav
a
Exemplo de Bean
método chamado porbotão ou link que
direciona a navegação para mesma página
atributos com get e setusados na caixa de texto da Página JSF
...<servletmapping> <servletname>Faces Servlet</servletname> <urlpattern>/faces/*</urlpattern></servletmapping>...
welcomeJSF.jsp
componentesJSF
faces/welcomeJSF.jsp
Interpretadapelo Browser
web
.xm
l
Requisição feita para pagina gerada
Página gerada
Execução
=Página JSF com JSP
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:viewf:subviewf:facetf:attributef:paramf:actionListenerf:valueChangeListener
f:setPropertyChangeListenerf:converterf:convertDateTimef:convertNumberf:validatorf:validateDoubleRangef:validateLength
f:validateLongRangef:loadBundlef:selectitemsf:selectitemf: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:formh:inputTexth:inputTextAreah:inputSecreth:inputHiddenh:outputLabelh:outputLinkh:outputFormat
h:outputTexth:commandButtonh:commandLinkh:messageh:messagesh:selectOneListboxh:selectOneMenuh:selectOneRadio
h:selectBooleanCheckboxh:selectManyCheckboxh:selectManyListboxh:selectManyMenuh:panelGridh:panelGrouph:dataTableh: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
▼ 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>
</h:form>
UI
HT
ML
<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:form> <h:outputText value="digite aqui"/> <h:inputText value="#{bean.campo}"/></h:form>
UI
HT
ML
<form ...
digite aqui<input type="text" name="j_id_id16:j_id_id20" />
...</form>
<h:outputText><h:inputText>
▼ OutputText → Rótulo texto▼ InputText → Caixa de entrada de texto
h:commandButton ▼ Define um botão com ação e a
navegação.
<h:form> <h:outputText value="digite aqui"/> <h:inputText value="#{bean.campo}"/> <h:commandButton value="Cadastrar" action="#{bean.acao}" /></h:form>
UI
HT
ML
...<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
▼ 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
<h:form> <h:outputText value="digite aqui"/> <h:inputText value="#{bean.campo}"/> <h:commandButton value="Cadastrar" action="#{bean.acao}" /></h:form>
Exemplo EL
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>
▼ 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)
<h:selectOneMenu,Radio,ListBox>
public class Bean {
private String [] cores = {"branco","prata","vermelho","azul"};
private String cor = ""; //gets e sets ... }
Car
ro.j
ava
UI
HT
ML
<h:selectOneMenu value="#{carroBean.cor}"> <f:selectItems value="#{carroBean.cores}"/></h:selectOneMenu>
<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>
Exemplo h:selectOneMenu
▼ 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)
<h:selectManyCheckBox,Menu,ListBox>
public class Bean { private String [] cores = {"branco","prata","vermelho","azul"};
private List<String> variasCores = new ArrayList<String>(); //gets e sets ... }
Car
ro.j
ava
Exemplo h:selectOneMenu
UI
HT
ML
<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
Arquivos .properties
informe=Informe seu NomenaoVazio=Nome não pode estar vazio.ok=OKola=Oláingles=Englishportugues=Portuguêsp
t_B
R.p
orp
etie
sp
t_B
R.p
orp
etie
s informe=Enter your namenaoVazio=Name cannot be null.ok=OKola=Helloingles=Englishportugues=Português
<application> <resourcebundle> <basename>mensagem.Mensagens</basename> <var>msg</var> </resourcebundle> <localeconfig> <defaultlocale>pt_BR</defaultlocale> <supportedlocale>en_US</supportedlocale> <supportedlocale>pt_BR</supportedlocale> </localeconfig></application>
▼ 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.
ResourceBundle
face
s-co
nfi
g.xm
l
<application> <resourcebundle> <basename>mensagem.Mensagens</basename> <var>msg</var> </resourcebundle> <localeconfig> <defaultlocale>pt_BR</defaultlocale> <supportedlocale>en_US</supportedlocale> <supportedlocale>pt_BR</supportedlocale> </localeconfig></application>
▼ 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.
ResourceBundle
face
s-co
nfi
g.xm
l
<%@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}"/>...
O que é ?
Bean.java
Atributos acessados pela Expressions Language da página JSF
Métodos invocados pela página JSF
@ManagedBean@RequestScopedpublic class EquacaoQuadratica { private float a; private float b; private float b; private float delta;
//get e set …
public String calcDelta() { delta = b*b – 4*a*c; return "/welcomeJSF.jsp"; }}
Bea
n.j
ava
Exemplo de Bean
método chamado porbotão ou link que
direciona a navegação para mesma página
atributos com get e setusados na caixa de texto da Página JSF
EquacaoQuadratica
- a: float- b: float- c: float- delta: float
+ gets e sets...+ calcDelta(): String
Faces Annotations
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.
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
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>
face
s-co
nfi
g.xm
lC
lass
e T
roca
.jav
a
Método do Managed Bean
<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>
face
s-co
nfi
g.xm
l
faces-config.xml▼ Navegação condicionada ao retorno
do método do bean
▼ 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ção e Converção
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:validateDoubleRange, f:validateLongRange
▼ Validadores customizáveis– Herdam Validador, sobrescrevem o
validate e são registrados no faces-config.xml
<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>
Validação Implícita
▼ <h:message for="campo1"/>– Impressão de mensagens – for: O id do campo do qual deseja-se
mostrar uma mensagem, possivelmente de erro
▼ 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" />
Validação explícita
<%@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" />...
Exemplo de Validação
Converções
BigDecimalConverter
BigIntegerConverter
BooleanConverter
ByteConverter
CharacterConverter
DateTimeConverter
DoubleConverter
FloatConverter
IntegerConverter
LongConverter
NumberConverter
ShortConverte
<h:outputText value="#{bean.date}">
<f:convertDateTime dateStyle="full" /> </h:outputText>
<h:outputText value="#{bean.soma}" >
<f:convertNumber type="currency" </h:outputText>
Request/Requisição
RetaurarVisão
Aplicar ValoresRequisitados
ProcessarValidações
Response/Resposta
RenderizarResposta
InvocarAplicação
AtualizarValores 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
RetaurarVisão
Aplicar ValoresRequisitados
ProcessarValidações
Response/Resposta
RenderizarResposta
InvocarAplicação
AtualizarValores 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
RetaurarVisão
Aplicar ValoresRequisitados
ProcessarValidações
Response/Resposta
RenderizarResposta
InvocarAplicação
AtualizarValores 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
RetaurarVisão
Aplicar ValoresRequisitados
ProcessarValidações
Response/Resposta
RenderizarResposta
InvocarAplicação
AtualizarValores 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
RetaurarVisão
Aplicar ValoresRequisitados
ProcessarValidações
Response/Resposta
RenderizarResposta
InvocarAplicação
AtualizarValores 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
RetaurarVisão
Aplicar ValoresRequisitados
ProcessarValidações
Response/Resposta
RenderizarResposta
InvocarAplicação
AtualizarValores 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.
raiz
web src test
conf java
classes.java
web-inf páginas.jsp, .html
lib classes tagsweb.xmlsun-web.xml
Bibliotecas.jar
Classes.class
Arquivos.tag
Diretório Projeto Netbeans
setup
br.edu.unifei.ecoe07.controle.dao
br.edu.unifei.ecoe07.modelo
FonteDados ClienteDao
crud
FilmeDaoLocacaoDao
crud crud
Cliente
-login:String-cpf:String-nome:String
Locacao
-id:int-locacao:Calendar-devolucao:Calendar
Filme
-codigo:int-nome:String
* 1
br.edu.unifei.ecoe07.controle.faces
ClienteBean
:EntityManager:ClienteDao:Cliente
:EntityManager:LocacaoDao/:Locacao:FilmeDao/:Filme:ClienteDao/:Cliente
LocacaoBean FilmeBean
:EntityManager:FilmeDao:Filme