Programação Web
JavaServer Faces
Dalton Valadares
Plano
● Visão geral sobre desenvolvimento web;
● Fundamentos e características do JSF;
● Principais implementações e bibliotecas de
componentes;
● Ciclo de vida do JSF;
● Exemplos básicos.
Desenvolvimento: Desktop x Web
Desktop:
● Replicação de código
nos clientes;
● Processamento local →
Regras de negócio,
validações, etc.;
● Gerência, manutenção e
depuração mais
complicados.
Web:
● Código centralizado em
servidor;
● Clientes mais leves e
comunicação por HTTP;
● Requisições e
respostas;
● Melhor gerenciamento e
manutenibilidade.
Funcionamento da Web
Cliente
Requisições
Servidor
Respostas
HTTP
Frameworks web baseados em componentes
● Arcabouços de software/Conjuntos de bibliotecas;
● Abstraem protocolo de comunicação;
● Dinamizam operações repetitivas de desenvolvimento;
● Buscam reutilização de código, evitando complexidade;
● Fornecem acesso a dados, segurança, gerência de
sessão, modelagem, etc.;
● Componentes visuais pré-definidos (renderização da
UI);
● Exemplos: Struts, Spring Web MVC, GWT, JSF, etc.
MVC - Model View Controller
Modelo arquitetural/Padrão de projeto: separa regras de
negócio/modelo de dados e visão por meio de um controlador.
Fonte: https://www.youtube.com/watch?v=3Cj2mDx0-Ws#t=745
JavaServer Faces (JSF)
● Framework web MVC
● Definida pela JCP (padrão Java)
● Conjunto de componentes padrão (UI)
● Tags jsp para acesso aos componentes
● Extensível/personalizável
● Comunicação entre componentes e dados do
servidor
● Eventos de componentes chamam funções do
JavaServer Faces (JSF)
● Validação e conversão de dados
● Suporte a Ajax
● Suporte à Internacionalização
● Guarda estado dos componentes (Stateful)
● Servidores de aplicação: Tomcat, Glassfish, JBoss,
etc.
Implementações e Bibliotecas de componentes
Implementações:
● Implementação de
referência: Oracle Mojarra
(http://javaserverfaces.java.
net/)
● Outra implementação:
MyFaces, da Apache (http:
//myfaces.apache.org/)
Bibliotecas:
● RichFaces
● PrimeFaces
● ICEFaces
● OpenFaces
● Trinidad
RichFaces
http://www.jboss.org/richfaces
rich:calendar rich:select rich:inplaceInput
PrimeFaces
http://www.primefaces.org/
p:calendar p:autoComplete p:inputText
ICEFaces
http://www.icefaces.org/
ace:dateTimeEntry ace:comboBox ace:textEntry
Ciclo JSF
Requisição
Restaurar visão
Aplicar valores da requisição
Processar requisições
Atualizar valores do modelo
Chamar aplicação
Renderizar resposta
Resposta
Configuração de ambiente
Fonte: https://www.youtube.com/watch?v=TA-s9z1eHrQ
Configuração de ambiente (cont.)
Configuração do ‘controlador’ do JSF (web.xml):
<servlet>
<servlet-name>FacesServlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>FacesServlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
Eclipse → Configuração ‘automática’
Configuração, ainda...
faces-config.xml (configurações dos ManagedBeans)
<faces-config
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd"
version="2.0">
</faces-config>
Menos usado, atualmente → @annotations
View JSF (xhtml) - Básico
Importar tags JSF → Namespace no .xhtml
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<!-- Tags do JSF -->
</html>
Tags JSF - Componentes
Hierarquia de componentes
<html ...>
<h:head>
<!-- Cabeçalho -->
</h:head>
<h:body>
<!-- Corpo da página -->
</h:body>
</html>
Managed Bean
@ManagedBean
public class TimeBean {
public String getTime() {
SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss");
return "Hora atual: " + sdf.format(new Date());
}
}
View ←→ Managed Bean
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:h="http://java.sun.com/jsf/html">
<h:head>
<title>JSF - Primeira Aula</title>
</h:head>
<h:body>
<h:outputText value =”#{timeBean.time}” />
</h:body>
</html>
JSF - Outros componentes básicos
<h:form>
<h:outputLabel for="date" value="Digite a data de hoje:"/>
<h:inputText id="date" value="#{timeBean.date}"/>
<h:commandButton value="Ok" action="#{timeBean.time}"/>
</h:form>
Importante:
<h:outputText value="Hora: #{timeBean.time}" rendered="#{not empty timeBean.time}"/>
Referências
http://docs.oracle.com/javaee/7/tutorial/doc/jsf-develop.htm
https://www.youtube.com/watch?v=TA-s9z1eHrQ
https://netbeans.org/kb/docs/web/jsf20-intro_pt_BR.html
http://www.dsc.ufcg.edu.br/~jacques/cursos/daca/html/jsf/jsf.htm
http://www.mkyong.com/jsf2/jsf-2-0-hello-world-example/
http://www.caelum.com.br/apostila-java-testes-jsf-web-services-design-
patterns/introducao-ao-jsf-e-primefaces/#7-6-recebendo-informacoes-do-
usuario
Dúvidas?

Desenvolvimento Web com JSF