JavaServer Faces Produtividade em Desenvolvimento

50 %
50 %
Information about JavaServer Faces Produtividade em Desenvolvimento

Published on August 12, 2008

Author: eduardo.bregaida

Source: slideshare.net

Description

Palestra ministrada no JustJava 2007

JavaServer Faces Produtividade em Desenvolvimento

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 Templates JSF 2.0 Produtividade 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

Templates

JSF 2.0

Apresentação Eduardo Bregaida Analista de sistemas Java da Tata Consultancy Services do Brasil - TCS. Membro do Java Community Process (JCP). Desenvolvedor JSF há 2 anos. Bacharelando na Universidade IMES – São Caetano do Sul.

Eduardo Bregaida

Analista de sistemas Java da Tata Consultancy Services do Brasil - TCS.

Membro do Java Community Process (JCP).

Desenvolvedor JSF há 2 anos.

Bacharelando na Universidade IMES – São Caetano do Sul.

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.

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

Life Cycle JSF - Fases São Atendidas pelo Reader Response e Restore Component Tree Restore Component Tree: O conjunto de componentes JSF é criado ou restaurado dependento da requisição (Primeira ou demais vezes executadas)

São Atendidas pelo Reader Response e Restore Component Tree

Restore Component Tree: O conjunto de componentes JSF é criado ou restaurado dependento da requisição (Primeira ou demais vezes executadas)

Life Cycle JSF - Fases Apply request Values: Os componentes irão extrair seu novo valor dos parâmetros da Request, colocando-os em variaveis de estado no servidor.

Apply request Values: Os componentes irão extrair seu novo valor dos parâmetros da Request, colocando-os em variaveis de estado no servidor.

Life Cycle JSF - Fases Process Validations: todos os validadores serão executados, em caso de erro de qualquer valor, a mensagem é alocada no FacesContext, caso contrário ele atualiza (Update Model Values) os valores dos inputs na camada de negócio através da EL.

Process Validations: todos os validadores serão executados, em caso de erro de qualquer valor, a mensagem é alocada no FacesContext, caso contrário ele atualiza (Update Model Values) os valores dos inputs na camada de negócio através da EL.

Life Cycle JSF - Fases Invoke Application: Os métodos do ManagedBeans são executados e as regras de navegação (Gravar, Excluir, Alterar,...) são resolvidas. Se tudo ocorrer bem é renderizada pelo container do JSP, caso contrario as mensagens gravadas no FacesContext são apresentadas.

Invoke Application: Os métodos do ManagedBeans são executados e as regras de navegação (Gravar, Excluir, Alterar,...) são resolvidas.

Se tudo ocorrer bem é renderizada pelo container do JSP, caso contrario as mensagens gravadas no FacesContext são apresentadas.

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

Templates

Templates Tiles Facelets JSFTemplating

Tiles

Facelets

JSFTemplating

Templates Alexandre (escrever)

Alexandre (escrever)

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

Add a comment

Related pages

Desenvolvimento WEB com Java Server Faces | PDF Flipbook

Desenvolvimento WEB com Java Server Faces ... com o de aplicações clientes desktop em termos de produtividade e funcionalidades o conceito ...
Read more

Algaworks Dwjsf Desenvolvimento Web Com Javaserver Faces ...

1. Objetivo do curso; 2. Introdução; 2.1. O que é JavaServer Faces? 2.2. Principais componentes; 2.3. Componentes adicionais; 2.4. Renderização de ...
Read more

JavaServer Faces – Wikipédia, a enciclopédia livre

JavaServer Faces é baseada em um modelo de desenho de IU ... Ferramentas de desenvolvimento. Eclipse; Java Studio Creator; JBuilde; JDeveloper ...
Read more

Mojarra JavaServer Faces

JavaServer™ Faces technology simplifies building user interfaces for JavaServer applications.
Read more

Algaworks Dwjsf Desenvolvimento Web Com Javaserver Faces ...

Scribd is the world's largest social reading and publishing site.
Read more

www.guj.com.br JavaServer Faces: A mais nova tecnologia ...

JavaServer Faces oferece ganhos no desenvolvimento de aplicações WEB por ... JavaServer Faces pode ser usado em conjunto com o Sun JavaTM System ...
Read more

JBoss Seam Simplicidade e produtividade no desenvolvimento ...

1 / JBoss Seam Simplicidade e produtividade no desenvolvimento de aplicações Web ... JavaServer Faces (JSF), Java ... Em nosso exemplo, iremos ...
Read more