JavaServer Faces
Rapid Web Application Development em Java
Ricardo [email protected]
Jobson [email protected]
O que é?
Um framework padrão(Standard) para aplicações webs
Define um modelo de programação
Componentes Reusáveis
Gera HTML a partir dos componentes
Validação e conversão
Arvore de componentes
Objetivos
Simplificar o desenvolvimento
Suporte por ferramentas
Eventos facilmente ligado a código server-side
Fácil de estender
Gerenciar o estado da UI
Padrões e Arquitetura
Model-View-Controller (MVC)
Baseada em factories
Árvore de componentes (Composite)
Eventos do lado do servidor
Mas o que é mesmo?
Uma aplicação JSF é como qualquer outra aplicação web Java
Roda dentro de um servlet container, e normalmente é composta de: Simples componentes Java Beans Event Listeners Páginas, como páginas JSP Outras classes como classes de acesso a
dados
Mas o que é mesmo?
Em adição aplicações JSF também contém: Uma tag library para renderizar os
componentes gráficos na página Uma tag library para tratamento de
eventos, validações e outras acções Backing Beans, que definem
propriedades e funções para os componentes gráficos
Mas o que é mesmo?
Além de: Classes implementando validators,
converters, event listeners e event handlers
Um descritor de aplicação para configurar o funcionamento da mesma
Como usar?
Prescisa-se de uma implementação: Implementação de referência MyFaces, do grupo Jakarta
Ciclo de vida do Request-response
Como usar?
Declarar o Faces Servlet (Front Controller) web.xml
<servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> <load-on-startup>1</load-on-startup></servlet>
<servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.jsf</url-pattern></servlet-mapping>
<context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/faces-config.xml</param-value></context-param>
Como usar?
Características Front Controller MVC (como Struts) Configuravel através de parametros de
contexto
Simples exemplo
Botão “trocar” troca o conteúdo do campo1 pelo do campo2, e vice-versa
Implementando páginas
TagLibraries UIComponent + HTML RenderKit
Renderer<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
Core JavaServer Faces<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
UIComponent + HTML RenderKit Renderer
<h:inputText> Define um campo de entrada de texto Atributos
• value: expressão que indica o conteúdo do campo. Possivelmente uma propriedade de um bean
<h:inputText id="campo1" value="#{TrocaBean.campo1}"/>
UIComponent + HTML RenderKit Renderer
<h:commandButton> Define um botão de ação Atributos
• action: expressão que indica a ação a ser invocada quando este componente for ativado
• actionListener: expressão que indica o método de listener que será notificado quando este componente for ativado
UIComponent + HTML RenderKit Renderer
<h:commandButton><h:commandButton id="trocar" action="#{TrocaBean.trocar}" value="Trocar" />
O método “trocar” do bean Trocar, não deve receber parâmetros e deve retornar uma String
UIComponent + HTML RenderKit Renderer
<h:commandLink> Renderiza um componente “a” HTML
que funciona como um botão submit de um form
• Uso análogo ao commandButton
UIComponent + HTML RenderKit Renderer
<h:form> Renderiza um formulário HTML
Core JavaServer Faces
<f:view> Container para todos os componentes
usados na página
Todos os componentes JavaServer Faces devem ser aninhados a este
Exemplo completo<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><body><f:view><h:form> <fieldset> <legend>Troca Exemplo</legend> <label>Campo1: <h:inputText id="campo1" value="#{TrocaBean.campo1}"/> </label><br/> <label>Campo2: <h:inputText id="campo2" value="#{TrocaBean.campo2}"/> </label><br/> <h:commandButton id="trocar" action="#{TrocaBean.trocar}" value="Trocar" /> </fieldset></h:form></f:view></body></html>
Backing Bean Model
Que bean “TrocaBean” é este?
package pcc;
public class Troca {
private String campo1; private String campo2;
//gets e sets ...
public String troca() { String temp = campo1; campo1 = campo2; campo2 = temp; return “sucesso”; }}
Backing Bean Model
Declarado no faces-config.xml<!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>pcc.Troca</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean>
</faces-config>
Backing Bean Model
Demostração...
Validação
Suporte validação de campos de entrada de forma declarativa <f:validateDoubleRange>, <f:validateLengtg>, <f:validateLongRange> e outros validators customizados podem ser aninhados campos de entrada
Validação
Suporte validação de campos de entrada de forma programática Um método do bean no formato
public void xyz(FacesContext faces, UIComponent coponent,
Object value)
Uma classe que implemente a interface javax.faces.validator.Validator
Validação
Mensagens de erro podem ser impressas utilizando a tag
<h:message>
Atributos• for: O id do campo do qual deseja-se
mostrar uma mensagem, possivelmente de erro
<h:message for="campo1"/>
Validação
Demostração...
O que mais?
Navegação definida no faces-config.xml Condicionada e método do bean Condicionada a retorno do método do
bean
O que mais?
Exemplo (faces-config.xml)<faces-config> <!-- ... --> <navigation-rule> <description></description> <from-view-id>/troca.jsp</from-view-id> <navigation-case> <description></description> <from-outcome>success</from-outcome> <to-view-id>/trocaSucesso.jsp</to-view-id> </navigation-case> </navigation-rule> <!-- ... --></faces-config>
O que mais?
Injeção de dependência nos beans Suporte a internacionalização
O que mais?
Converters para a conversão de entradas em objetos específicos Implementados de formas análogas a
validação
Listeners de eventos do usuário Implementados de formas análogas a
validação e a converters
O que mais?
Gerênciadores de layout <h:panelGrid>
Geração de Tabelas de dados total suporte a coleções <h:dataTable var=“filme” value=#{filmes}> <h:column id=“#{filme.nome}”>
O que mais?
Suporte a outros tipos de entrada<h:selectBooleanCheckbox><h:selectManyCheckbox><h:selectManyListbox><h:selectManyMenu><h:selectOneListbox><h:selectOneMenu><h:selectOneRadio>
O que mais?
Implementação open-source, MyFaces (jakarta), com excelentes componentes customizados Geradores de menus Geradores de popups Geradores de Barra de navegação Grande quantidade de Validators
customizados: EmailValidator, CreditCardValidator, etc.
O que mais?
Suporte de ferramentas comerciais para geração Drag’n Drop Sun Java Studio Creator IBM Webspheere JDeveloper (free)
Uma tecnologia de geração de páginas a altura de ASP.NET Porém, com toda a maturidade da linguagem
Java no ServerSide
Top Related