Produtividade com JavaServer Faces

50 %
50 %
Information about Produtividade com JavaServer Faces

Published on August 12, 2008

Author: eduardo.bregaida

Source: slideshare.net

Description

Palestra Ministrada na Universidade de Santa Barbara do Oeste

JavaServer Faces Facilitando o Desenvolvimento Web

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

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

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.

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.

O que JavaServer Faces nos traz?

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;

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

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.

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.

Uma pequena aplicação.

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.

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

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.

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

Life Cycle JSF

Roteiro de Uso

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

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

Exemplo: Passo 1 – Criar um Bean package br.com.justjava.sgv.cadastro.campanha; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity public 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; } }

package br.com.justjava.sgv.cadastro.campanha;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

@Entity

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

}

}

Exemplo: Passo 2 e 3 - f:view e h:form e Especificar o Action Controller <%@ page contentType=&quot;text/html; charset=UTF-8&quot; %> <%@ taglib uri=&quot;http://java.sun.com/jsf/html&quot; prefix=&quot;h&quot; %> <%@ taglib uri=&quot;http://java.sun.com/jsf/core&quot; prefix=&quot;f&quot; %> <%@ taglib uri=&quot;http://myfaces.apache.org/tomahawk&quot; prefix=&quot;t&quot; %> <html> <head> <title>Cadastro de Cliente</title> </head> <body> <f:view> <h:form> <t:panelGrid align=&quot;center&quot;> <h:outputText value=&quot;Nome Campanha:&quot;/> <h:inputText value=&quot;#{campanhaHandler.cadastroCampanha.nomeCampanha}&quot;required=&quot;true&quot;/> <h:outputText value=&quot;Observação:&quot;/> <h:inputTextarea value=&quot;#{campanhaHandler.cadastroCampanha.observacaoCampanha}&quot; required=&quot;true&quot;/> <h:commandButton value=&quot;Gravar&quot; action=&quot;#{campanhaHandler.salvar}&quot;/> </t:panelGrid> </h:form> </f:view> </body> </html>

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

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

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

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

<html>

<head>

<title>Cadastro de Cliente</title>

</head>

<body>

<f:view>

<h:form>

<t:panelGrid align=&quot;center&quot;>

<h:outputText value=&quot;Nome Campanha:&quot;/>

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

<h:outputText value=&quot;Observação:&quot;/>

<h:inputTextarea value=&quot;#{campanhaHandler.cadastroCampanha.observacaoCampanha}&quot; required=&quot;true&quot;/>

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

</t:panelGrid>

</h:form>

</f:view>

</body>

</html>

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

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

}

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>

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

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=&quot;center&quot;> <h:dataTable value=&quot;#{campanhaHandler.allCadastroCampanha}&quot; id=&quot;tabelaDados&quot; rows=&quot;5&quot; var=&quot;ccam&quot; border=&quot;1“> <h:column> <f:facet name=&quot;header&quot;> <h:outputText value=&quot;Nome Campanha&quot;/> </f:facet> <h:outputText value=&quot;#{ccam.nomeCampanha}&quot;/> </h:column> <h:column> <f:facet name=&quot;header&quot;> <h:outputText value=&quot;Observação&quot;/> </f:facet> <h:outputText value=&quot;#{ccam.observacaoCampanha}&quot;/> </h:column> </h:dataTable> </t:panelGrid> </h:form>

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

<h:form>

<t:panelGrid align=&quot;center&quot;>

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

<h:column>

<f:facet name=&quot;header&quot;>

<h:outputText value=&quot;Nome Campanha&quot;/>

</f:facet>

<h:outputText value=&quot;#{ccam.nomeCampanha}&quot;/>

</h:column>

<h:column>

<f:facet name=&quot;header&quot;>

<h:outputText value=&quot;Observação&quot;/>

</f:facet>

<h:outputText value=&quot;#{ccam.observacaoCampanha}&quot;/>

</h:column>

</h:dataTable>

</t:panelGrid>

</h:form>

Rodando Antes: Depois:

Antes:

Depois:

IDEs

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

Netbeans - Web Pack – Studio Creator

Eclipse

Webtools + jsftoos (a ser liberado em Julho)

EasyEclipse

MyEclipse

Red Hat Developer Studio

Rational Application Developer – WSAD

JDeveloper

Customizações

Customizações Facilidade na customização de: Validadores Conversores Componentes de Interface Renderizadores Mensagens

Facilidade na customização de:

Validadores

Conversores

Componentes de Interface

Renderizadores

Mensagens

Pequenas mudanças no Default

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.

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.

Implementações

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

Apache

MyFaces

Tomahawk/ Sandbox/ Tobago/ Trinidad/ Orchestra

Red Hat/JBoss

RichFaces

Ajax4JSF

Red Hat/JBoss

RichFaces

ICEsoft Technologies Inc.

ICEfaces

Oracle

ADF Faces

Facelets

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

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

Facelets Editor WYSIWYG (Dreamweaver)

Editor WYSIWYG

(Dreamweaver)

Facelets Red Hat Developer Studio

Red Hat Developer Studio

Facelets Template Página que utiliza componente Java Server Faces Component

Template

Página que utiliza componente

Java Server Faces Component

O que vai ter novo no JSF 2.0?

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.

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.

Perguntas???

Contato: [email_address] http:// www.javawora.blogspot.com Blog Java Anywhere:

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

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 [email_address] http://www.javawora.blogspot.com

Add a comment

Related pages

JavaServer Faces 2.2: aumento de produtividade

O JSF (JavaServer Faces) é o framework MCV para Java mais utilizado atualmente nas médias e grandes corporações para construção de interfaces com ...
Read more

Anatomia do JSF – JavaServer Faces - Rafael Ponte

Coordenador do grupo JavaServer Faces International Group ... • Arquitetura, produtividade, ferramentas RAD, AJAX, melhores componentes UI..
Read more

8/3/2014 JavaServer Faces 2 | Jefferson Moreira - Academia.edu

By Jefferson Moreira in Java Server Faces. Log In; Sign Up; pdf. 8/3/2014 ... 18/3/2014 JavaServer Faces 2.2: aumento de produtividade www.devmedia ...
Read more

Novidades do JSF 2.2 - Java Day 2011 - YouTube

Reflection: maximizando a produtividade em Java - Prof. Esp. Fábio Antonelli - Java Day 2011 - Duration: 36:13. Gonow Tecnologia 1,231 views.
Read more

JAVASERVER FACES (JSF): UM ESTUDO COMPARATIVO ENTRE ...

produtividade, do surgimento de ... Acessado em 18/08/2008 [12] GOYAL, Deepak, and VARMA, Vikas, Introduction do Java Server Faces (JSF), Sun Microsystems ...
Read more

Java Server Faces (JSF) - Computação UFCG

Java Server Faces (JSF) O que é JSF ? Mais que um framework para desenvolver aplicações web de forma ágil, JSF foi incorporado ao especificação J2EE.
Read more

Desenvolvimento WEB com Java Server Faces | PDF Flipbook

Desenvolvimento WEB com Java Server Faces ... ao criarem produtos que valorizem a produtividade no desenvolvimento de interfaces visuais ...
Read more