37
JavaServer Faces Facilitando o Desenvolvimento Web

Produtividade com JavaServer Faces

Embed Size (px)

DESCRIPTION

Palestra Ministrada na Universidade de Santa Barbara do Oeste

Citation preview

Page 1: Produtividade com JavaServer Faces

JavaServer FacesFacilitando o Desenvolvimento

Web

Page 2: Produtividade com JavaServer Faces

26 de Setembro de 2007

Tópicos Abordados• O que JavaServer Faces nos traz?

– Especificações– Managed Beans– Expression Language

• Life Cycle JSF• Roteiro de Uso• IDEs• Customizações• Pequenas mudanças no Default• Implementações• Facelets• JSF 2.0

Facilitando o desenvolvimento Web com JavaServer Faces

Page 3: Produtividade com JavaServer Faces

26 de Setembro de 2007

Apresentação• Eduardo Bregaida

– Analista de sistemas Java da Tata Consultancy Services do Brasil - TCS.• Banco Real;• VisaNet

– Membro do Java Community Process (JCP).– Desenvolvedor Java há 4 anos.– Desenvolvedor JSF há 2 anos.– Agente Certificador do projeto JEDI na região do grande ABC.– Bacharelando em Sistemas de Informação na Universidade IMES.

Page 4: Produtividade com JavaServer Faces

26 de Setembro de 2007

O que JavaServer Faces nos traz?

Page 5: Produtividade com JavaServer Faces

26 de Setembro de 2007

O que JavaServer Faces nos traz?• É mais do que um framework, é uma especificação baseada em MVC;

• Suporte a internacionalização;

• Facilita criação de telas;

• Facilita a transferência dos dados entre telas e camadas de negócio através da EL.

• Produtividade para conversores recebidos do formulário para os tipos nas classes;

• Flexibilidade para renderização.

• Criar modelos simples de eventos entre interfaces gráficas e as classes no servidor.

• Mecanismos produtivos para validação de campos na tela.

• Facilidade para criação de componentes;

Page 6: Produtividade com JavaServer Faces

26 de Setembro de 2007

Especificações• JSF 1.0 e 1.1 – JSR 127

– Problemas com renderização– ELs diferentes entre JSP e JSF– Não portava a tag JSTL <c:forEach>

• JSF 1.2 – JSR 252– Resolveram todos os problemas de incompatibilidade, pois o JSF 1.2 e o JSP 2.1

tiveram muitas uniões e estão dentro do JEE.

• JSF 2.0 – JSR 314– Ainda está em discussão muitas coisas, porém estão planejando deixar bem

integrado e intuitivo JSF e JSP.

Page 7: Produtividade com JavaServer Faces

26 de Setembro de 2007

Uma pequena aplicação.

Page 8: Produtividade com JavaServer Faces

26 de Setembro de 2007

Managed Beans• É uma classe que expões objetos de negócio para camada de apresentação;

• São Registrados no faces-config.xml;

• Objetos que sofrerão alterações em seus atributos durante uma requisição, assim como seus métodos podem ser chamados a partir de um command;

• São como as Actions do Struts, porém os form beans são injetados por setters dentro do seu próprio bean;

• Os ManagedBeans serão usados na EL das páginas.

Page 9: Produtividade com JavaServer Faces

26 de Setembro de 2007

Expression Language - EL

• É uma poderosa linguagem de expressão (Linguagem de navegação) para acessar propriedades de beans e coleções.

• Quando ocorrer uma requisição pelo browser é preenchido dinamicamente os elementos da página pela camada de negócios.

• Quando ocorre um Submit ocorre a modificação no estado da camada de negócio.

Page 10: Produtividade com JavaServer Faces

26 de Setembro de 2007

Life Cycle JSF

Page 11: Produtividade com JavaServer Faces

26 de Setembro de 2007

Roteiro de Uso

Page 12: Produtividade com JavaServer Faces

26 de Setembro de 2007

Roteiro de Uso• Criar um bean que represente o formulário

• Usar f:view e h:form para formulários

• Especificar o Action Controller com o atributo de ação h:commandButton.

• Criar um controlador que leia os dados do formulário, chame a lógica de negócio, guarde os resultados em beans e tenha um retorno.

• No faces-config é usado para declarar o form bean e as regras de navegação.

• Criar os JSP´s responsáveis por cada retorno declarado

Page 13: Produtividade com JavaServer Faces

26 de Setembro de 2007

Exemplo: Passo 1 – Criar um Beanpackage br.com.justjava.sgv.cadastro.campanha;

import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;

@Entitypublic class CadastroCampanha {

@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private long id;

private String nomeCampanha;

private String observacaoCampanha;

public long getId() { return id;}

public void setId(long id) { this.id = id;}

public String getNomeCampanha() { return nomeCampanha;}

public void setNomeCampanha(String nomeCampanha) { this.nomeCampanha = nomeCampanha;

}

public String getObservacaoCampanha() { return observacaoCampanha;}

public void setObservacaoCampanha(String observacaoCampanha) { this.observacaoCampanha = observacaoCampanha;}

}

Page 14: Produtividade com JavaServer Faces

26 de Setembro de 2007

Exemplo: Passo 2 e 3 - f:view e h:form e Especificar o Action Controller

<%@ page contentType="text/html; charset=UTF-8" %>

<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %>

<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %>

<%@ taglib uri="http://myfaces.apache.org/tomahawk" prefix="t" %>

<html>

<head>

<title>Cadastro de Cliente</title>

</head>

<body>

<f:view>

<h:form>

<t:panelGrid align="center">

<h:outputText value="Nome Campanha:"/>

<h:inputText value="#{campanhaHandler.cadastroCampanha.nomeCampanha}"required="true"/>

<h:outputText value="Observação:"/> <h:inputTextarea value="#{campanhaHandler.cadastroCampanha.observacaoCampanha}" required="true"/>

<h:commandButton value="Gravar" action="#{campanhaHandler.salvar}"/>

</t:panelGrid>

</h:form>

</f:view>

</body>

</html>

Page 15: Produtividade com JavaServer Faces

26 de Setembro de 2007

Exemplo: Passo 4 – Criar o Controlador

public void salvar() {

Session session = HibernateUtil.getCurrentSession();

DAO<CadastroCampanha> dao = new DAO<CadastroCampanha>(session,CadastroCampanha.class);

if (cadastroCampanha.getId() == 0) {

dao.salveOrUpdate(this.cadastroCampanha);

} else {

session.merge(this.cadastroCampanha);

}

this.cadastroCampanha = new CadastroCampanha();

}

Page 16: Produtividade com JavaServer Faces

26 de Setembro de 2007

Exemplo: Passo 5 – Configurar o faces-config.xml

<managed-bean>

<managed-bean-name>campanhaHandler</managed-bean-name>

<managed-bean-class>

br.com.justjava.sgv.cadastro.campanhahandler.CampanhaHandler

</managed-bean-class>

<managed-bean-scope>session</managed-bean-scope>

</managed-bean>

<navigation-rule>

<from-view-id>/cadastroCampanha.jsp</from-view-id>

</navigation-rule>

Page 17: Produtividade com JavaServer Faces

26 de Setembro de 2007

Exemplo: Passo 6 – Criar o JSP responsável pelo retorno

<!- - Insiro este <h:form> com a tabela de retorno dentro do próprio JSP que cadastra - -><h:form>

<t:panelGrid align="center">

<h:dataTable value="#{campanhaHandler.allCadastroCampanha}" id="tabelaDados" rows="5" var="ccam" border="1“>

<h:column>

<f:facet name="header">

<h:outputText value="Nome Campanha"/>

</f:facet>

<h:outputText value="#{ccam.nomeCampanha}"/>

</h:column>

<h:column>

<f:facet name="header">

<h:outputText value="Observação"/>

</f:facet>

<h:outputText value="#{ccam.observacaoCampanha}"/>

</h:column>

</h:dataTable>

</t:panelGrid>

</h:form>

Page 18: Produtividade com JavaServer Faces

26 de Setembro de 2007

Rodando• Antes:

• Depois:

Page 19: Produtividade com JavaServer Faces

26 de Setembro de 2007

IDEs

Page 20: Produtividade com JavaServer Faces

26 de Setembro de 2007

IDEs• Netbeans- Web Pack – Studio Creator

• Eclipse– Webtools + jsftoos (a ser liberado em Julho)– EasyEclipse– MyEclipse– Red Hat Developer Studio

• Rational Application Developer – WSAD

• JDeveloper

Page 21: Produtividade com JavaServer Faces

26 de Setembro de 2007

Customizações

Page 22: Produtividade com JavaServer Faces

26 de Setembro de 2007

Customizações• Facilidade na customização de:

– Validadores

– Conversores

– Componentes de Interface

– Renderizadores

– Mensagens

Page 23: Produtividade com JavaServer Faces

26 de Setembro de 2007

Pequenas mudanças no Default

Page 24: Produtividade com JavaServer Faces

26 de Setembro de 2007

Pequenas mudanças no Default

• Montagem de templates: como Clay (Shale) e Facelets e substituir um pelo outro é questão de uma linha de configuração.

• A beans factory: podemos usar os beans do Spring ao invés dos managed beans do faces-config.xml.

• Renderização dos componentes: existem implementações, utilizando por exemplo XUL ou HTML + Ajax.

Page 25: Produtividade com JavaServer Faces

26 de Setembro de 2007

Implementações

Page 26: Produtividade com JavaServer Faces

26 de Setembro de 2007

Implementações• Apache

– MyFaces• Tomahawk/ Sandbox/ Tobago/ Trinidad/ Orchestra

• Red Hat/JBoss – RichFaces– Ajax4JSF

• Red Hat/JBoss – RichFaces

• ICEsoft Technologies Inc. – ICEfaces

• Oracle – ADF Faces

Page 27: Produtividade com JavaServer Faces

26 de Setembro de 2007

Facelets

Page 28: Produtividade com JavaServer Faces

26 de Setembro de 2007

Facelets• Facelets

– “Mais do que templates, componentes reutilizáveis”

– Sem XML

– Renderização mais ágil, pois acompanha as fases do JSF

– Conhecimento de seu template sem muito esforço

– Proximidade (programador x designer)

– Java Server Faces Component (“jsfc”)

Page 29: Produtividade com JavaServer Faces

26 de Setembro de 2007

Facelets• Editor WYSIWYG

(Dreamweaver)

Page 30: Produtividade com JavaServer Faces

26 de Setembro de 2007

Facelets• Red Hat Developer Studio

Page 31: Produtividade com JavaServer Faces

26 de Setembro de 2007

Facelets• Template

• Página que utiliza componente

• Java Server Faces Component

Page 32: Produtividade com JavaServer Faces

26 de Setembro de 2007

O que vai ter novo no JSF 2.0?

Page 33: Produtividade com JavaServer Faces

26 de Setembro de 2007

JSF 2.0• Suporte a templates, baseado no Facelets, Tiles, dentre outros;

• Simplificar a criação de aplicações do tipo CRUD;

• Melhor tratamento de mensagens de erro;

• Mecanismo de tratamento de exceções padrão;

• Criação de aplicações Web sem XML, utilizando anotações;

• Simplificação no desenvolvimento de componentes;

• Especificar onde os artefatos (Conversores, Renderizadores, etc.) dever ser colocados no WAR, permitindo ao container encontra-los sem a necessidade de sua definição em arquivos de configuração;

• Permitir que artefatos sejam alterados sem a necessidade de reinicializar o servidor.

Page 34: Produtividade com JavaServer Faces

26 de Setembro de 2007

Perguntas???

Page 35: Produtividade com JavaServer Faces

26 de Setembro de 2007

Contato:[email protected]

http://www.javawora.blogspot.com

Blog Java Anywhere:

Page 36: Produtividade com JavaServer Faces

26 de Setembro de 2007

Referências• http://www.caelum.com.br• http://javawora.blogspot.com/search/label/JSF• http://www.guj.com.br/java.tutorial.artigo.158.1.guj• http://java.sun.com/javaee/javaserverfaces/• www.jcp.org

– JSRs: 127; 252; 314.• http://www.jspolympus.com/JSF/JSFLifeCycle.jsp• http://www.guj.com.br/java.tutorial.artigo.187.1.guj• http://javaplace.blogspot.com/2007/07/frameworks-jsf-que-encapsulam-o-uso-do.html• http://www.nabble.com/Struts-+-JSF:-Vale-a-Pena--t4056131.html• http://www.javaplace.blogspot.com/ • http://myfaces.apache.org/• http://www.oracle.com/technology/products/adf/adffaces/index.html• http://www.icefaces.org/main/home/index.jsp• https://ajax4jsf.dev.java.net/

• Revistas:– Mundo Java nº: 21.– Java Magazine nº: 23; 26; 43; 44; 45; 46; 47; 48.

• Livros:– Faces in Action (Kito Mann – Manning, 2004);– JavaServer Faces (Hans Bergsten – O´Reilly, 2004);– Core JavaServer Faces (David Geary e Cay Horstmann).

Page 37: Produtividade com JavaServer Faces

Obrigado

[email protected]

http://www.javawora.blogspot.com