Produtividade com JavaServer Faces

Post on 18-Nov-2014

6.631 views 2 download

description

Palestra Ministrada na Universidade de Santa Barbara do Oeste

Transcript of Produtividade com JavaServer Faces

JavaServer FacesFacilitando o Desenvolvimento

Web

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

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.

26 de Setembro de 2007

O que JavaServer Faces nos traz?

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;

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.

26 de Setembro de 2007

Uma pequena aplicação.

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.

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.

26 de Setembro de 2007

Life Cycle JSF

26 de Setembro de 2007

Roteiro de Uso

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

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;}

}

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>

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();

}

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>

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>

26 de Setembro de 2007

Rodando• Antes:

• Depois:

26 de Setembro de 2007

IDEs

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

26 de Setembro de 2007

Customizações

26 de Setembro de 2007

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

– Validadores

– Conversores

– Componentes de Interface

– Renderizadores

– Mensagens

26 de Setembro de 2007

Pequenas mudanças no Default

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.

26 de Setembro de 2007

Implementações

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

26 de Setembro de 2007

Facelets

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”)

26 de Setembro de 2007

Facelets• Editor WYSIWYG

(Dreamweaver)

26 de Setembro de 2007

Facelets• Red Hat Developer Studio

26 de Setembro de 2007

Facelets• Template

• Página que utiliza componente

• Java Server Faces Component

26 de Setembro de 2007

O que vai ter novo no JSF 2.0?

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.

26 de Setembro de 2007

Perguntas???

26 de Setembro de 2007

Contato:eduardo.bregaida@gmail.com

http://www.javawora.blogspot.com

Blog Java Anywhere:

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).

Obrigado

eduardo.bregaida@gmail.com

http://www.javawora.blogspot.com