produtividade com javaserver faces
DESCRIPTION
Palestra Ministrada na Universidade de Santa Barbara do OesteTRANSCRIPT
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:[email protected]
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).