Escolar Documentos
Profissional Documentos
Cultura Documentos
Agradecimentos
Agradecemos ao Prof. Fbio Dias (UFC Quixad) por ter gentilmente cedido seus slides para adaptao e uso nesta disciplina.
Introduo
Managed Beans representam classes java que so automaticamente criadas, inicializadas e armazenadas no escopo apropriado quando solicitados Essa facilidade permite:
Declarar e inicializar as propriedades de um bean em um arquivo central (faces-config) Controlar facilmente o escopo onde o bean armazenado Modificar uma classe ou propriedade do bean sem recompilar cdigo Inicializar um bean com Value Binding Expressions Acessar um bean utilizando simples expresses da JSF EL
Managed Beans
package br.ufc.dsweb.controller; @ManagedBean(name="loginController") @RequestScoped public class LoginController {
private Login login = new Login();
<h:inputText value="#{loginControler.login.nome}"/>
Managed Beans
<managed-bean> <managed-bean-name>loginController</managed-bean-name> <managed-beanclass>br.ufc.dsweb.controller.LoginController</managed-beanclass> <managed-bean-scope>request</managed-bean-scope> </managed-bean> faces-config.xml
<h:inputText value="#{loginControler.login.nome}"/>
Configurao
A configurao de um bean pode ser feita no faces-config.xml atravs do elemento managedbean:
Descrio do bean Nome utilizado por ferramentas GUI cone utilizado por ferramentas GUI Nome lgico para acessar o bean Nome da classe que representa o bean Escopo onde o bean ser armazenado
Escopos do Managed-Bean
Existem 4 escopos a partir do JSF 2:
@RequestScoped: os beans gerenciveis de escopo request so instanciados e permanecem disponveis durante uma mesma requisio HTTP. @ViewScoped: os beans gerenciveis de escopo view permanecem disponveis enquanto o usurio permanecer em uma mesma pgina de uma aplicao. @SessionScoped: os beans gerenciveis de escopo session so salvos na sesso HTTP de um usurio. @ApplicationScoped: os beans gerenciveis de escopo application permanecem disponveis enquanto a aplicao estiver no ar, e podem ser acessados por todos os usurios da aplicao.
Value-Binding Expressions
Diversos componentes de interface possuem um atributo chamado value, que permite especificar:
Um valor diretamente:
<h:outputText value=Ol Pessoal"/>
Value-Binding Expressions
No segundo caso, utilizando JSF EL JSF Expression Language. A JSF EL foi criada para ser utilizada dentro de uma value-binding expression:
Utilizando JSF EL, o valor associado ao atributo pode ser utilizado tanto para leitura, quanto para escrita:
Propriedade get chamada ao desenhar o componente. Propriedade set chamada quando a resposta do usurio processada.
Value-Binding Expressions
Inclusive, possvel efetuar um encadeamento acessando beans contidos dentro de outros beans Utiliza-se o ponto como separador
<h:outputText value=#{pessoa.endereco.cidade}"/>
No exemplo acima, um bean pessoa possui um bean como propriedade chamado endereco, que possui uma propriedade chamada cidade.
Introduo
Pginas so associadas a nomes lgicos Os nomes lgicos so utilizados para efetuar um redirecionamento para as pginas
Introduo
O exemplo abaixo mostra uma navegao de uma pgina de origem (login.xhtml) para dois possveis destinos (error.xhtml ou saudacao.xhtml).
Nomes lgicos das pginas de destino
Pgina de origem
Navegao
A navegao opera de acordo com eventos de ao disparados por fontes de ao. Fontes de ao capturam uma ao do usurio
Exemplos de fontes: botes, links
Navegao
Exemplo de nome lgico em mtodo de ao:
<h:commandButton type="submit" value="Enviar action="#{loginController.efetuarLogin}"/>
return "falha";
}
Regras de Navegao
A navegao do JSF opera com base em um conjunto de regras de navegao (elemento navigation-rule do faces-config.xml)
Regras de navegao definem que pginas podem ser alcanadas a partir de outras pginas
Cada caminho para uma pgina representado por um elemento navigation-case do faces-config.xml
O navigation geralmente selecionado com base no nome lgico solicitado.
Regras de Navegao
Configurao
Define uma regra de navegao
Opcionalmente especifica a pgina de origem qual a regra se aplica
Define qual mtodo de ao pode chamar esta pgina Nome lgico dado ao recurso
Redirecionamento global
Busca pginas de redirecionamento definidas globalmente, ou seja, no associadas a uma pgina de origem em especfico
Redirecionamento Local
Para o redirecionamento local, trs situaes podem ser definidas:
1. Apenas usando um nome lgico especfico 2. Usando um nome lgico e vindo de um mtodo de ao 3. Apenas vindo de um mtodo de ao especificado
Redirecionamento Local
Nome Lgico Especfico
O esquema mais simples definir um nome lgico para redirecionamento a partir de uma pgina. Para isso, basta incluir: No from-view-id: a pgina de onde se est redirecionando No from-outcome: o nome lgico da prxima pgina
<navigation-rule> <from-view-id>/login.xhtml</from-view-id>
<navigation-case>
<from-outcome>sauda</from-outcome> <to-view-id>/saudacao.xhtml</to-view-id> </navigation-case>
</navigation-rule>
Redirecionamento Local
Nome Lgico + Ao Para garantir que o nome lgico foi chamado a partir de um mtodo de ao especfico, deve-se utilizar o elemento from-action.
til quando deseja-se diferenciar dois mtodos de ao que produzem um mesmo nome lgico
<from-view-id>/login.xhtml</from-view-id> <navigation-case> <from-action>#{loginBean.efetuarLogin}</from-action> <from-outcome>sauda</from-outcome> <to-view-id>/saudacao.xhtml</to-view-id> </navigation-case> </navigation-rule>
<navigation-rule>
Redirecionamento Local
Ao Especfica
Pode-se ainda definir que sempre que um mtodo de ao seja executado, ele ir chamar uma determinada pgina.
Para isso, define-se apenas o elemento fromaction, sem o from-outcome.
Redirecionamento Global
Para o redirecionamento global, duas situaes podem ser definidas:
1. O redirecionamento vir de qualquer pgina 2. O redirecionamento vir de um grupo de pginas
Redirecionamento Global
Qualquer Pgina As regras de navegao podem ser definidas de forma que um nome lgico pode ser utilizado por qualquer pgina
Para isso, deve-se utilizar o wildcard (*) no elemento from-view-id ou simplesmente no definir este elemento
Redirecionamento Global
Qualquer Pgina
<navigation-rule> <from-view-id>*</from-view-id> <navigation-case> <from-outcome>login</from-outcome> <to-view-id>/login.xhtml</to-view-id> </navigation-case> </navigation-rule> <navigation-rule> <navigation-case> <from-outcome>logout</from-outcome> <to-view-id>/logout.xhtml</to-view-id> </navigation-case> </navigation-rule> Ou no definir o elemento from-view-id Pode-se usar o *
Redirecionamento Global
Grupo de Pginas
As regras de navegao podem definidas de forma que um nome lgico pode ser utilizado por um grupo de pginas
Para isso, deve-se utilizar o wildcard (*) no elemento from-view-id sempre como sufixo
Redirecionamento Global
Grupo de Pginas
<navigation-rule> <from-view-id>/funcionario/*</from-view-id> <navigation-case> Pode-se aplicar o * para referenciar <to-view-id>/sucesso.xhtml</to-view-id> pginas em um </navigation-case> diretrio </navigation-rule> Pode-se aplicar o * para <navigation-rule> um conjunto de recursos <from-view-id>/cadastro*</from-view-id> que iniciam com um prefixo qualquer <navigation-case> <from-outcome>sucesso</from-outcome> <from-outcome>erroCadastro</from-outcome> <to-view-id>/erro.xhtml</to-view-id> </navigation-case> </navigation-rule>
Navegao Implcita
No precisamos definir um nome lgico para as pginas, apenas retornar o nome absoluto da pgina.
public String efetuarLogin(){ if(login.equals("fabio") && senha.equals("12345"))
return "saudacao.xhtml";
else return "error.xhtml"; } <h:commandButton type="submit" value="Enviar action=saudacao.xhtml"/>
Introduo
O desenvolvimento de aplicaes que utilizem a tecnologia JSF requer um bom conhecimento das bibliotecas de tags da JSF As bibliotecas padro da JSF possuem um total de 43 tags e so divididas em duas bibliotecas:
Core
Representam tags genricas independentes da forma de renderizao (visualizao) dos dados
HTML
Representam tags especficas para renderizao de pginas HTML
Introduo
Assim como outras bibliotecas de tags, as Tags JSF precisam ser declaradas na pgina para poderem ser utilizadas
O prefixo padro das tags Core f O prefixo padro das tags HTML h
Sintaxe:
xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html
As tags core so abordadas aos poucos durante o desenvolvimento das aplicaes, sendo assim, focaremos nas tags html
Tags
inputText, inputTextArea, inputSecret, inputHidden outputLabel, outputLink, outputFormat, outputText commandButton, commandLink selectOneListbox, selectOneMenu, selectOneRadio, selectBooleanCheckbox, selectManyCheckbox, selectManyListbox, selectManyMenu panelGrid, panelGroup dataTable, column form, graphicImage
h:outputText
Considerado um elemento a ser contado para uso de h:panelGrid. Mais seguro. Permite o uso de CSS especfico. Permite o uso de conversores.
h:outputText
Isso d erro em uma pgina .xhtml processada pelo JSF:
<p>ação</p>
Error Parsing /login.xhtml: Error Traced[line: 47] A entidade "ccedil" foi referenciada, mas no declarada. Ele interpreta como uma entidade xml.
Soluo:
<p> <h:outputText value="a&ccedil;&atilde;o" escape="false" /> </p>
Resultado:
ao
Ela possui os mesmos atributos bsicos das outras sendo o mais importante o value
<h:outputLink value="http://www.ufc.br"/>
Descrio
Nome lgico definido no face-config para redirecionamento ou mtodo que executar a ao e retornar uma string com o redirecionamento
actionListener
Caminho para imagem especificada em um commandButton (/app/img.gif) Tipo de boto gerado (commandButton):button, submit, reset Valor expresso no boto ou link (imagem)
<h:commandLink action="#{loginController.efetuarLogin}">
<h:outputText value="Clique para Entrar"/> <f:param name="nome" value="Fabio"/> <f:param name="id" value="#{loginBean.id}"/> </h:commandLink> Passando parmetros para o link
h:panelGroup
Trata vrios componentes como sendo um s
background: PowderBlue;
} .oddRows{ background: MediumTurquoise; } </style>
h:selectOneRadio
<h:selectOneRadio value="#{modeloBean.modelo.marca}"> <f:selectItems value="#{marcaBean.marcas}" var="marca" itemValue="#{marca}" itemLabel="#{marca.nome}" /> </h:selectOneRadio>
h:selectOneListbox
<h:selectOneListbox value="#{modeloBean.modelo.marca}" size="5"> <f:selectItems value="#{marcaBean.marcas}" var="marca" itemValue="#{marca}" itemLabel="#{marca.nome}" /> </h:selectOneListbox>
h:selectManyMenu
<h:selectManyMenu value="#{automovelBean.automovel.acessorios}"> <f:selectItems value="#{acessorioBean.acessorios}" var="acessorio" itemValue="#{acessorio}" itemLabel="#{acessorio.descricao}" /> </h:selectManyMenu>
h:selectManyListbox
<h:selectManyListbox value="#{automovelBean.automovel.acessorios}" size="5"> <f:selectItems value="#{acessorioBean.acessorios}" var="acessorio" itemValue="#{acessorio}" itemLabel="#{acessorio.descricao}" /> </h:selectManyListbox>
h:selectManyCheckbox
<h:selectManyCheckbox value="#{automovelBean.automovel.acessorios}"> <f:selectItems value="#{acessorioBean.acessorios}" var="acessorio" itemValue="#{acessorio}" itemLabel="#{acessorio.descricao}" /> </h:selectManyCheckbox>
h:selectBooleanCheckbox
<h:selectBooleanCheckbox value="#{usuarioBean.usuario.inativo}"/>
h:inputFile
<h:form enctype="multipart/form-data"> Imagem: <h:inputFile value="#{automovelBean.uploadedFile}"/> <h:commandButton value="Salvar" action="#{automovelBean.salvar}"/> </h:form>
Pasta resources
Pasta que ir conter todas as imagens, arquivos CSS e Javascript. Pode tanto estar na raiz do contexto web quanto na pasta META-INF dentro de um jar ou no classpath da aplicao.
Pasta resources
Para acessar esses arquivos usa os seguintes cdigos na sua pgina:
<h:head> <h:outputStylesheet library="css" name="nomeArquivoCSS.css"/> <h:outputScript library="js" name="nomeArquivoJS.js" /> </h:head> <h:graphicImage library="img" name="nomeArquivoImagem.gif"/>
h:outputScript e h:outputStylesheet
<h:outputStylesheet library="css" name="facesmotors.css"/> <h:outputScript library="js" name="facesmotors-commons.js" target="head"/>
Exerccios
Crie uma aplicao que exibe um formulrio de cadastro de medicamentos de uma farmcia e depois exibe em uma pgina os dados enviados O formulrio de cadastro deve conter os seguintes campos:
Nome de remdio (campo texto) Princpio ativo (campo texto) Observaes (rea) Boto de submisso para cadastro Link de submisso para cadastro Na tela inicial tem um link simples para o cadastro
Data Table
A tag dataTable
Para exibir tabelas de dados em uma pgina, podese utilizar a tag dataTable. A tag itera sobre uma lista de dados para criar um elemento table.
<h:dataTable value="#{bean.lista}" var="item"> <h:column>
<h:outputText value="#{item.nome}"/>
</h:column> <h:column> <h:outputText value="#{item.idade}"/> </h:column> </h:dataTable>
A tag dataTable
Atributos: value: lista contendo os dados a serem exibidos
Pode ser: vetor, List, ResultSet, DataModel
var: varivel temporria criada para acessar cada elemento da lista Tag column
A tag column representa uma coluna a ser criada na tabela No corpo da tag, especifica-se o valor da varivel (var) ou da propriedade presente na varivel que deseja-se exibir
</h:column>
<h:column> <h:outputText value="#{fone.numero}" /> </h:column>
</h:dataTable>
Cabealhos e Rodaps
Para especificar um cabealho e/ou um rodap, necessrio utilizar a tag <f:facet ...>.
Cabealhos e Rodaps
<h:dataTable value="#{pessoaController.telefones}" var="fone"> <h:column> <f:facet name="header">
<h:column>
<f:facet name="header"> <h:outputText value="Nmero" /> </f:facet>
Cabealhos e Rodaps
Exerccio
1) Converta seu sistema de cadastro de pessoa utilizando JSF. Deve ter o mdulo de cadastro, atualizao, excluso e listagem.