SlideShare une entreprise Scribd logo
1  sur  49
Télécharger pour lire hors ligne
2 / 49www.4linux.com.br
 Experiência em missão crítica de missão crítica
 Pioneira no ensino de Linux à distância
 Parceira de treinamento IBM
 Primeira com LPI no Brasil
 + de 30.000 alunos satisfeitos
 Reconhecimento internacional
 Inovação com Hackerteen e Boteconet
3 / 49www.4linux.com.br
As grandesAs grandes
novidades do JSFnovidades do JSF
2.0!2.0!
4 / 49www.4linux.com.br
A evoluçãoA evolução
● JSF 1.0 – Lançado em março de 2004, sua especificação
é a JSR 127, não faz parte do conjunto de tecnologias
padrões do Java EE. Compatível com servlet 2.3 e JSP
1.2
● JSF 1.1 – Lançado em maio de 2004, bug fixes corrigidos
e ganhos de performance, a especificação continua a
mesma, continua não fazendo parte do padrão Java EE,
possui suporte para a JDK 1.3 ou superior. Compatível
com servlet 2.3 e JSP 1.2.
5 / 49www.4linux.com.br
A evoluçãoA evolução
● JSF 1.2 – Lançado em maio de 2006, compatível com
servlet 2.5 e JSP 2.1. Segue a JSR 252. Faz parte do
Java EE 5. Possui várias vantagens por utilizar JSP 2.1,
por exemplo, integração com JSTL e Unified Expression
Language, entre outras.
6 / 49www.4linux.com.br
Principais mudanças ePrincipais mudanças e
melhorias do JSF 2.0melhorias do JSF 2.0
● Lançado em Julho de 2009. Desenvolvido seguindo a JSR
314. Faz parte do Java EE 6. Compatível com CDI,
Servlet 3, JSP 2.2.
● Inúmeras mudanças foram adotadas na versão 2.0. Para
acompanhar todas as mudanças consulte o preface 1 da
JSR 314 liberado em julho de 2009
● As principais mudanças e melhorias adotadas foram:
✔ AJAX nativo
✔ Anotações
✔ Navegação implícita e condicional
7 / 49www.4linux.com.br
Principais mudanças ePrincipais mudanças e
melhorias do JSF 2.0melhorias do JSF 2.0
● Integração nativa com a JSR 303 Bean Validation
✔ View Parameters
✔ Passagem de parâmetros via GET
● View Scope
● Custom Scope
● faces-config opcional
● Facelets como view padrão
● Project Stage
● Resources
● SelectItens mais “usáveis”
✔ Inúmeras outras melhorias
8 / 49www.4linux.com.br
ResourcesResources
● Como era até o JSF 1.2
<link href=
"#{facesContext.externalContext.requestContextPath}/css/
estilo.css" rel=”stylesheet”>
● No JSF 2 novas tags foram adicionadas para o
carregamento de CSS, Javascript, imagens
● Pode ser utilizado um mecanismo padrão para carregar
estes recursos na página, que consiste em criar um
diretório chamado resources na raiz da aplicação
● É possível definir se o javascript ou css será carregado no
head ou body da página através do atributo targeT
9 / 49www.4linux.com.br
ResourcesResources
<h:outputStylesheet library="css" name=”meucss.css"/>
<h:outputScript library="js" name="meujs.js"
target="head"/>
<h:graphicImage library="imagens" name="logo.jpg"/>
● #{resources['images:logo.jpg']}
● Exemplo de estrutura de diretórios:
10 / 49www.4linux.com.br
AnotaçõesAnotações
● Com o JSF 2 é possível criar managed beans e atribuir
um escopo, converters e validators com anotações sem
utilizar nenhuma linha de XML no faces-config.
● Abaixo algumas anotações incluídas no JSF 2
@ManagedBean, @ManagedProperty
@FacesValidator, @FacesConverter
@ApplicationScoped, @SessionScoped, @RequestScoped,
@ViewScoped, @NoneScoped, @CustomScoped
● O faces-config.xml pode ser utilizado apenas para regras
de navegação mais complexas.
11 / 49www.4linux.com.br
AJAX nativoAJAX nativo
● Nas versões 1.x do JSF é necessário a recorrer a
frameworks JSF de terceiros, por exemplo, RichFaces,
IceFaces, PrimeFaces.
● Abaixo um trecho de código utilizando JSF 1.2
<h:form id="formulario">
<h:panelGrid columns="2">
<h:inputText id="inputNome" value="#{usuarioMB.nome}">
<a4j:support event="onkeyup" reRender="outNome" />
</h:inputText>
<h:outputText id="outNome" value="#{usuarioMB.name}" />
</h:panelGrid>
</h:form>
12 / 49www.4linux.com.br
AJAX nativoAJAX nativo
● Uma das principais melhorias no JSF 2 é a possibilidade
de fazer requisições de forma nativa sem a necessidade
de um utilizar um framework visual de terceiros para isso.
● Abaixo o mesmo trecho de código utilizando JSF 2.0
<h:form id="formulario">
<h:panelGrid columns="2">
<h:inputText id="inputNome" value="#{usuarioMB.nome}">
<f:ajax event="keyup" render="outNome"/>
</h:inputText>
<h:outputText id="outNome" value="#{usuarioMB.nome}" />
</h:panelGrid>
</h:form>
13 / 49www.4linux.com.br
Ajax nativoAjax nativo
● Nova API Javascript para requisições Ajax e acesso aos
componentes:
<h:outputScript name="jsf.js" library="javax.faces"
target="head"></h:outputScript>
● jsf.specversion
● jsf.getProjectStage()
jsf.ajax.addOnEvent(metodoDeCallback) / addOnError
●
<h:commandButton id=”button1” action=”addComment”
value=”Comentar” onclick=”jsf.ajax.request(this, event,
{execute:'button1', render: 'status', onevent:
handleEvent, onError: handleError}); return false;”/>
14 / 49www.4linux.com.br
Ajax NativoAjax Nativo
● @all - Todos os components da página.
● @none – Nenhum componente da página.
● @this – O selemento que disparou o pedido.
● @form – O Formulário e os components desse formulário.
15 / 49www.4linux.com.br
EscoposEscopos
● Com o JSF 2 novos escopos foram adicionados:
@ViewScoped e @CustomScoped
● Utilizando CDI em substituição aos Managed Beans
podemos utilizar o escopo de conversação:
@ConversationScoped
● Para quem já estava acostumado a utilizar o JBoss Seam,
o @ViewScoped é similar ao escopo de página e o
@ConversationScoped similar ao escopo de conversação,
já existentes desde a primeira versão do Seam.
16 / 49www.4linux.com.br
View ScopeView Scope
@ManagedBean(name="clienteMB")
@ViewScoped
public class ClienteMB {
…
}
@Named(value="clienteMB")
@ConversationScoped
public class ClienteMB {
…
}
17 / 49www.4linux.com.br
Navegação implícitaNavegação implícita
● No JSF 1.2 as regras de navegação obrigatoriamente
precisavam ser configuradas no faces-config.xml
<navegation-rule>
<from-view-id>/usuario/boasvindas.xhtml</from-view-id>
<navegation-case>
<from-outcome>new</from-outcome>
<to-view-id>/usuario/cadastrousuario.xhtml</to-view-id>
</navegation-case>
</navegation-rule>
18 / 49www.4linux.com.br
Navegação implícitaNavegação implícita
● Com o JSF 2 basta apenas informar o caminho da view
nas actions, eliminando a necessidade de criar todas as
vezes regras de navegações no faces-config.xml
public String novoUsuario() {
usuario = new Usuario();
return "/usuario/cadastrousuario";
}
● Também podemos fazer da seguinte forma:
<h:commandButton action="/usuario/cadastrousuario"
value="Cadastrar usuário"
19 / 49www.4linux.com.br
Navegação ImplicitaNavegação Implicita
● faces-redirect=true indica um redirecionamento do
navegador.
– /user/list.xhtml?faces-redirect=true
● Inclui a extensão .xhtml caso não tenha.
● Inclui / caso não tenha.
● Procura por uma view com esse viewId, por exemplo:
– user/list => /user/list.xhtml
● Caso não encontre a view, a navegação implicita é
encerrada, e torna a string um outcome.
●
20 / 49www.4linux.com.br
Navegação condicionalNavegação condicional
● Diferentemente da navegação implícita, a navegação
condicional e definida no faces-config.xml
● Oferece maior poder de controle para a tag <navigation-
case>
● Feita através da tag <if> dentro de um <navigation-case>
● Podem ser adicionadas quantas tags <if> forem
necessárias
● A tag <if> deve apontar para um método ou expressão
que retorne um valor valor booleano. A regra de
navegação somente será executada caso todas as tags
<if> retornem true.
21 / 49www.4linux.com.br
Navegação condicionalNavegação condicional
<navigation-rule>
<from-view-id> boasvindas.xhtml </from-view-id>
<navigation-case>
<from-outcome> edit </from-outcome>
<if> #{usuarioBean.isAdmin} </if>
<if> #{usuarioBean.idade > 18} </if>
<to-view-id> cadastrousuario.xhtml </to-view-id>
</navigation-case>
</navigation-rule>
22 / 49www.4linux.com.br
Bean ValidationBean Validation
● JSF 2 é compatível com a JSR 303 – Bean Validation
● É necessário que o ambiente ofereça suporte para o Bean
Validation
● Possui mecanismos avançados e customizáveis de
validação
● Proporciona maior reaproveitamento de código para o JSF
pois as regras de validação não ficam vinculadas
diretamente nas páginas
23 / 49www.4linux.com.br
Bean ValidationBean Validation
public class Cliente implements Serializable {
@NotNull
private Long id;
@NotNull
private String nome;
@Size(max=30)
private String sobrenome;
@Past
private Date dataNascimento;
@Pattern(regexp = ".+@.+.[a-z]+" message="O e-mail informado não
é válido")
private String email;
...
24 / 49www.4linux.com.br
Bean ValidationBean Validation
<h:messages />
<h:form>
<h:panelGrid columns="2">
Nome <h:inputText value="#{clienteMB.cliente.nome}" />
Sobrenome <h:inputText
value="#{clienteMB.cliente.sobrenome}" >
<f:validateBean disabled="true"/>
– </h:inputText>
–
Email <h:inputText value="#{clienteMB.cliente.email}" />
Id <h:inputText value="#{clienteMB.cliente.id}" />
<h:commandButton action="page2" value="Enviar" />
</h:panelGrid>
</h:form>
25 / 49www.4linux.com.br
View ParametersView Parameters
● View Parameters servem para atribuir os valores da query
string passados por uma requisição GET de forma
apropriada para o bean (managed bean ou CDI)
● Utilizamos as tags <f:metadata> e <f:viewParam> para
atribuir os valores da query string no bean
<f:metadata>
<f:viewParam name="id"
value="#{clienteMB.cliente.id}"/>
</f:metadata>
●
● Http://localhost:8080/client/show.xhtml?id=1
26 / 49www.4linux.com.br
View ParametersView Parameters
Utilizamos as tags <h:link> ou <h:button> para requisições
GET
<h:link outcome="editar" value="Editar">
<f:param name="id" value="#{cliente.id}"></f:param>
</h:link>
● View Parameters podem ser utilizados para criar
bookmarked links.
27 / 49www.4linux.com.br
SelectItemsSelectItems
● No JSF 1.2 para utilizarmos componentes do tipo select
one e select many de forma dinâmica era necessário ou
criar uma lista de SelectItems ou um Map
public List<SelectItem> getComboStatus(){
List<SelectItem> lista = new ArrayList<SelectItem>();
List<Status> resultado = getBuscaStatus();
for(Status s: resultado)
lista.add(new SelectItem(s.id, s.nome));
return lista;
}
28 / 49www.4linux.com.br
SelectItemsSelectItems
<h:selectOneRadio value="#{produto.status}>
<f:selectItems value="#{produto.comboStatus}"/>
</h:selectOneRadio>
● Com o JSF 2 não precisamos mais criar uma lista de
SelectItems
● É possível passar um List para os componentes do tipo
select one e select many
● Novos atributos foram adicionados na tag <f:selectItems>
<h:selectOneRadio value="#{produto.status}>
<f:selectItems value="#{produto.comboStatus}" var="s"
itemLabel="#{s.nome}" itemValue="#{s.id}" />
</h:selectOneRadio>
29 / 49www.4linux.com.br
Project StageProject Stage
● Com o JSF 2 é possível especificar no web.xml em quase
fase do ciclo de desenvolvimento a aplicação se encontra
<context-param>
<param-name> javax.faces.PROJECT_STAGE </param-name>
<param-value> Development </param-value>
</context-param>
● Essa propriedade de configuração, permite que o JSF
emita mensagens de erros mais completas no cliente,
faciltando o desenvolvimento.
30 / 49www.4linux.com.br
Project StageProject Stage
● Os valores possíveis são Development, UnitTest,
SystemTest, Production, Extension.
#{facesContext.application.projectStage}
#{initParam['javax.faces.PROJECT_STAGE']}
●
//Verificando através do enum de ProjectStage
FacesContext facesContext = FacesContext.getCurrentInstance();
if (facesContext.isProjectStage(ProjectStage.Development)) {
// executa determinada ação
}
31 / 49www.4linux.com.br
Composite ComponentsComposite Components
● Provê meios mais simples de criar um componente
customizado, sem a necessidade de criar tlds ou estender
Renders.
● Simplesmente utilizando tag é possível criar um
componente.
<html... xmlns:cc=”http://java.sun.com/jsf/composite/”>
<cc:interface>
<cc:attribute name="title"/>
<cc:attribute name="description" required=”true”/>
<cc:attribute name=”actionMethod” method-signature=”java.lang.String
adicionar()” />
● </cc:interface>
..
32 / 49www.4linux.com.br
Composite ComponentsComposite Components
<cc:implementation>
<h:form>
#{cc.attrs.title} - #{cc.attrs.description}
<h:commandButton action=”#{cc.attrs.actionMethod}”
value=”Confirmar”/>
</h:form>
</cc:implementation>
</html>
33 / 49www.4linux.com.br
Composite ComponentsComposite Components
● Utilizando um componente criado:
<html... xmlns:mo=”http://java.sun.com/jsf/composite/moviecomp”>
…
<mo:moviebox title=”#{movie.title}” actionMethod=””/>
</html>
34 / 49www.4linux.com.br
Integração com CDIIntegração com CDI
● Integração com as especificações JSR 299 (CDI) e JSR
330 (DI)
● JSR 299: Provê uma arquitetura com escopes bom
definidos. Também traz transiocionalidade a camada web.
● JSR 330: Provê conjunto de anotações para realizar
injeção de dependência.
● É possível utilizar diretamente na view qualquer um EJB
que utiliza CDI.
35 / 49www.4linux.com.br
Integração com CDIIntegração com CDI
@Stateless
@LocalBean
@Named("movieService")
public class MovieManagerSessionBean {
@PersistenceContext(unitName = "movie-persistence")
private EntityManager entityManager;
…..
<h:dataTable value="#{movieService.allMovies}" var="movie"
styleClass="tabela" headerClass="header" rowClasses="odd,even">
36 / 49www.4linux.com.br
JSF 2.2JSF 2.2
● Nova especificação – JSR 344
● Será lançado antes do Java EE 7
● Proposed Final Draft Published = Março de 2012
37 / 49www.4linux.com.br
JSF 2.2 – File UploadJSF 2.2 – File Upload
● File Upload nativo.
● Suporte a AJAX.
● Compatível com Portlets
● Será criado um novo componente <h:inputFile />
● Possuirá atributos que permitirá o desenvolvedor habilitar
ou não o uso de ajax, javascript, portlet e entre outros.
38 / 49www.4linux.com.br
JSF 2.2 – viewActionJSF 2.2 – viewAction
ComponentComponent
● Com o JSF 2.2 existe um novo componente chamado de
viewAction que proporciona uma maneira mais fácil e
rápida para fazer determinadas validações no lado do
servidor
● Similar ao componente <s:viewAction> do Seam 3
● <f:viewAction> é declarado como child de <f:metadata>
<f:metadata>
<f:viewParam name="id" value="#{produto.id}"/>
<f:viewAction action="#{produto.verificaProduto}"/>
</f:metadata>
39 / 49www.4linux.com.br
JSF 2.2 – viewActionJSF 2.2 – viewAction
ComponentComponent
public String verificaProduto() {
boolean isExists = verificaProduto(produto.id);
if(!isExists)
facesContext.addMessage(null, new FacesMessage("Produto
não encontrado"));
return null;
}
● Links bookmarkable mais eficientes. Maior controle dos
parâmetros GET
40 / 49www.4linux.com.br
JSF 2.2 – viewActionJSF 2.2 – viewAction
ComponentComponent
● A especificação do JSF 2 exige pelo menos um view
parameter dentro de um view metadata para que ele seja
executado, porém, o JSF 2.2 não possui esse pré-
requisito
● Pode ser usado em qualquer fase do ciclo de vida do JSF
<f:viewAction action="#{catalog.checkItem}"
phase="UPDATE_MODEL_VALUES"/>
● Especificamos a fase do ciclo de vida do JSF através da
constante da classe javax.faces.event.PhaseID
41 / 49www.4linux.com.br
JSF 2.2 – viewAction eJSF 2.2 – viewAction e
Navageção ImplícitaNavageção Implícita
● Compatível com regras de navegação
<navigation-rule>
<from-view-id>/index.xhtml</from-view-id>
<navigation-case>
<from-action> #{produdo.verificaProduto}
</from-action>
<if>#{!produto.isInvalido} </if>
<to-view-id>/listaProdutos.xhtml</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
42 / 49www.4linux.com.br
JSF 2.2 – DI em todos osJSF 2.2 – DI em todos os
artefatos JSFartefatos JSF
● Até o JSF 2.1 somente era possível fazer DI para EJBs
(@EJB), CDI (@Inject) e managed beans do JSF
● Mas e os Converters? Validators? Como eu faço DI de um
EJB neles?
● JSF 2.0 e 2.1 = lookup
● JSF 2.2 = DI
43 / 49www.4linux.com.br
JSF 2.2 – DI em todos osJSF 2.2 – DI em todos os
artefatos JSFartefatos JSF
@FacesConverter(value="br.com.fourlinux.videostore.conve
rters.Movie")
public class MovieConverter implements Converter {
@Override
public Object getAsObject(FacesContext context,
UIComponent component, String value) {
MovieManagerSessionBean movies;
try {
Context jndiContext = new InitialContext();
movies = (MovieManagerSessionBean) jndiContext
.lookup("java:module/MovieManagerSessionBean");
...
44 / 49www.4linux.com.br
JSF 2.2 – DI em todos osJSF 2.2 – DI em todos os
artefatos JSFartefatos JSF
@FacesConverter(value="br.com.fourlinux.videostore.conve
rters.Movie")
public class MovieConverter implements Converter {
@Override
public Object getAsObject(FacesContext context,
UIComponent component, String value) {
@EJB MovieManagerSessionBean movies;
...
45 / 49www.4linux.com.br
JSF 2.2 – Vários outrosJSF 2.2 – Vários outros
recursosrecursos
● Gerenciar requisições ajax em um fila (queue control)
● Suporte a HTML 5
● Maior integração com portlets
46 / 49www.4linux.com.br
JSF 2 – FrameworksJSF 2 – Frameworks
● RichFaces 4 - http://www.jboss.org/richfaces
● PrimeFaces 2 - http://www.primefaces.org/
● IceFaces 2 - http://www.icefaces.org/
● MyFaces Trinidad 2.0 - http://myfaces.apache.org/trinidad
47 / 49www.4linux.com.br
ReferênciasReferências
● http://www.jcp.org/en/jsr/detail?id=314
● http://docs.jboss.org/seam/3/faces/latest/reference/en-US/html/components.html#viewaction
● http://java.net/jira/secure/IssueNavigator.jspa?mode=hide&requestId=10268
● http://javaserverfaces-spec-public.java.net/
48 / 49www.4linux.com.br
Código fonteCódigo fonte
● https://github.com/gabriel-ozeas/javaone2011
● Para executar é necessário o maven
● mvn clean package cargo:run
● localhost:8080 cai direto na aplicação!
49 / 49www.4linux.com.br
ObrigadoObrigado
Gustavo Lira
Gabriel Ozeas
gustavo@4linux.com.br
gabriel.ozeas@4linux.com.br
www.4linux.com.br
www.hackerteen.com
twitter.com/4LinuxBR
Tel: 55-11-2125-4747

Contenu connexe

En vedette

OpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayOpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayDiego Santos
 
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
 IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando... IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...Diego Santos
 
Cryptorave apresentacao
Cryptorave apresentacaoCryptorave apresentacao
Cryptorave apresentacaoSergio Amadeu
 
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...Diego Santos
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLDiego Santos
 
KDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MITKDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MITDiego Santos
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livreDiego Santos
 
Inteligência Operacional utilizando a solução Elastic.
Inteligência Operacional utilizando a solução Elastic.Inteligência Operacional utilizando a solução Elastic.
Inteligência Operacional utilizando a solução Elastic.4LinuxCursos
 

En vedette (9)

OpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlayOpenLDAP, criando e explorando um overlay
OpenLDAP, criando e explorando um overlay
 
Cloud é Linux
Cloud é LinuxCloud é Linux
Cloud é Linux
 
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
 IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando... IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
IaaS: Implantação e gerenciamento de configurações de ambientes Cloud usando...
 
Cryptorave apresentacao
Cryptorave apresentacaoCryptorave apresentacao
Cryptorave apresentacao
 
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...
Arquiteturas híbridas de atendimento em Cloud Computing para otimizar o uso d...
 
Como lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQLComo lidar com cargas de trabalho mistas - PostgreSQL
Como lidar com cargas de trabalho mistas - PostgreSQL
 
KDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MITKDC Spoofing com Kerberos MIT
KDC Spoofing com Kerberos MIT
 
Análise de malware com software livre
Análise de malware com software livreAnálise de malware com software livre
Análise de malware com software livre
 
Inteligência Operacional utilizando a solução Elastic.
Inteligência Operacional utilizando a solução Elastic.Inteligência Operacional utilizando a solução Elastic.
Inteligência Operacional utilizando a solução Elastic.
 

Similaire à Principais mudanças e melhorias do JSF 2.0

JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysDr. Spock
 
JSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaJSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaDr. Spock
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Frameworkelliando dias
 
Minicurso Java Server Faces
Minicurso Java Server FacesMinicurso Java Server Faces
Minicurso Java Server FacesJoão Longo
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesEder Magalhães
 
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesMC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesRodrigo Cândido da Silva
 
TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.Rogério Napoleão Jr.
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkFlávio Lisboa
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaJSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaEduardo Bregaida
 
5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEB
5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEB5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEB
5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEBRafael Chinelato Del Nero
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPMarcelo Andrade
 
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Sergio Lima
 
Apresentação jsf 2.0
Apresentação jsf 2.0Apresentação jsf 2.0
Apresentação jsf 2.0Paulo Neto
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer FacesEduardo Bregaida
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a Rômulo Jales
 
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.orgBarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.orgjqrd
 

Similaire à Principais mudanças e melhorias do JSF 2.0 (20)

JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
JSF 2.0 e ScrumToys
JSF 2.0 e ScrumToysJSF 2.0 e ScrumToys
JSF 2.0 e ScrumToys
 
JSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com JavaJSF 2.0: Uma Evolução nas Interfaces Web com Java
JSF 2.0: Uma Evolução nas Interfaces Web com Java
 
Spring MVC Framework
Spring MVC FrameworkSpring MVC Framework
Spring MVC Framework
 
Minicurso Java Server Faces
Minicurso Java Server FacesMinicurso Java Server Faces
Minicurso Java Server Faces
 
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfacesJSF2 c/ PrimeFaces, RichFaces e ICEfaces
JSF2 c/ PrimeFaces, RichFaces e ICEfaces
 
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrõesMC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
MC31 - Desenvolvimento um Aplicativo completo usando JSF, EJB e padrões
 
Aula parte 2 de JSF 2.2
Aula parte 2 de JSF 2.2Aula parte 2 de JSF 2.2
Aula parte 2 de JSF 2.2
 
TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.TechDay - Sistemas WEB em Java - Rogério N. Jr.
TechDay - Sistemas WEB em Java - Rogério N. Jr.
 
Pense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend FrameworkPense no futuro: PHP com Zend Framework
Pense no futuro: PHP com Zend Framework
 
JSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.javaJSF e outras tecnologias Java Web - IMES.java
JSF e outras tecnologias Java Web - IMES.java
 
5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEB
5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEB5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEB
5 técnicas para acelerar o desenvolvimento e reduzir Bugs em aplicações WEB
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHP
 
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
Introduzindo StimulusJS: o novo Framework JavaScript para Ruby On Rails.
 
Apresentação jsf 2.0
Apresentação jsf 2.0Apresentação jsf 2.0
Apresentação jsf 2.0
 
Produtividade com JavaServer Faces
Produtividade com JavaServer FacesProdutividade com JavaServer Faces
Produtividade com JavaServer Faces
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a
 
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.orgBarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
BarCamp 2007 - CodeIgniter e OncologiaPediátrica.org
 
Implementação de
Implementação de Implementação de
Implementação de
 
Mini curso JBC
Mini curso JBCMini curso JBC
Mini curso JBC
 

Plus de Diego Santos

Práticas DevOps com Zend Server
Práticas DevOps com Zend ServerPráticas DevOps com Zend Server
Práticas DevOps com Zend ServerDiego Santos
 
HTML5 – O que tem de novo?
HTML5 – O que tem de novo?HTML5 – O que tem de novo?
HTML5 – O que tem de novo?Diego Santos
 
Criando Mapas de rede para monitoramento com Zabbix
Criando Mapas de rede para monitoramento com ZabbixCriando Mapas de rede para monitoramento com Zabbix
Criando Mapas de rede para monitoramento com ZabbixDiego Santos
 
Tenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a BonitaTenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a BonitaDiego Santos
 
Socialize os sites da sua empresa com eXo Platform
Socialize os sites da sua empresa com eXo PlatformSocialize os sites da sua empresa com eXo Platform
Socialize os sites da sua empresa com eXo PlatformDiego Santos
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em CDiego Santos
 
Análise estática de malware com o pev
Análise estática de malware com o pevAnálise estática de malware com o pev
Análise estática de malware com o pevDiego Santos
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosDiego Santos
 
Formando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosFormando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosDiego Santos
 
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxWebcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxDiego Santos
 

Plus de Diego Santos (10)

Práticas DevOps com Zend Server
Práticas DevOps com Zend ServerPráticas DevOps com Zend Server
Práticas DevOps com Zend Server
 
HTML5 – O que tem de novo?
HTML5 – O que tem de novo?HTML5 – O que tem de novo?
HTML5 – O que tem de novo?
 
Criando Mapas de rede para monitoramento com Zabbix
Criando Mapas de rede para monitoramento com ZabbixCriando Mapas de rede para monitoramento com Zabbix
Criando Mapas de rede para monitoramento com Zabbix
 
Tenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a BonitaTenha mais tempo e gerencie seus processos com a Bonita
Tenha mais tempo e gerencie seus processos com a Bonita
 
Socialize os sites da sua empresa com eXo Platform
Socialize os sites da sua empresa com eXo PlatformSocialize os sites da sua empresa com eXo Platform
Socialize os sites da sua empresa com eXo Platform
 
Programando Software Livre em C
Programando Software Livre em CProgramando Software Livre em C
Programando Software Livre em C
 
Análise estática de malware com o pev
Análise estática de malware com o pevAnálise estática de malware com o pev
Análise estática de malware com o pev
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizados
 
Formando Desenvolvedores Efetivos
Formando Desenvolvedores EfetivosFormando Desenvolvedores Efetivos
Formando Desenvolvedores Efetivos
 
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxWebcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
 

Principais mudanças e melhorias do JSF 2.0

  • 1.
  • 2. 2 / 49www.4linux.com.br  Experiência em missão crítica de missão crítica  Pioneira no ensino de Linux à distância  Parceira de treinamento IBM  Primeira com LPI no Brasil  + de 30.000 alunos satisfeitos  Reconhecimento internacional  Inovação com Hackerteen e Boteconet
  • 3. 3 / 49www.4linux.com.br As grandesAs grandes novidades do JSFnovidades do JSF 2.0!2.0!
  • 4. 4 / 49www.4linux.com.br A evoluçãoA evolução ● JSF 1.0 – Lançado em março de 2004, sua especificação é a JSR 127, não faz parte do conjunto de tecnologias padrões do Java EE. Compatível com servlet 2.3 e JSP 1.2 ● JSF 1.1 – Lançado em maio de 2004, bug fixes corrigidos e ganhos de performance, a especificação continua a mesma, continua não fazendo parte do padrão Java EE, possui suporte para a JDK 1.3 ou superior. Compatível com servlet 2.3 e JSP 1.2.
  • 5. 5 / 49www.4linux.com.br A evoluçãoA evolução ● JSF 1.2 – Lançado em maio de 2006, compatível com servlet 2.5 e JSP 2.1. Segue a JSR 252. Faz parte do Java EE 5. Possui várias vantagens por utilizar JSP 2.1, por exemplo, integração com JSTL e Unified Expression Language, entre outras.
  • 6. 6 / 49www.4linux.com.br Principais mudanças ePrincipais mudanças e melhorias do JSF 2.0melhorias do JSF 2.0 ● Lançado em Julho de 2009. Desenvolvido seguindo a JSR 314. Faz parte do Java EE 6. Compatível com CDI, Servlet 3, JSP 2.2. ● Inúmeras mudanças foram adotadas na versão 2.0. Para acompanhar todas as mudanças consulte o preface 1 da JSR 314 liberado em julho de 2009 ● As principais mudanças e melhorias adotadas foram: ✔ AJAX nativo ✔ Anotações ✔ Navegação implícita e condicional
  • 7. 7 / 49www.4linux.com.br Principais mudanças ePrincipais mudanças e melhorias do JSF 2.0melhorias do JSF 2.0 ● Integração nativa com a JSR 303 Bean Validation ✔ View Parameters ✔ Passagem de parâmetros via GET ● View Scope ● Custom Scope ● faces-config opcional ● Facelets como view padrão ● Project Stage ● Resources ● SelectItens mais “usáveis” ✔ Inúmeras outras melhorias
  • 8. 8 / 49www.4linux.com.br ResourcesResources ● Como era até o JSF 1.2 <link href= "#{facesContext.externalContext.requestContextPath}/css/ estilo.css" rel=”stylesheet”> ● No JSF 2 novas tags foram adicionadas para o carregamento de CSS, Javascript, imagens ● Pode ser utilizado um mecanismo padrão para carregar estes recursos na página, que consiste em criar um diretório chamado resources na raiz da aplicação ● É possível definir se o javascript ou css será carregado no head ou body da página através do atributo targeT
  • 9. 9 / 49www.4linux.com.br ResourcesResources <h:outputStylesheet library="css" name=”meucss.css"/> <h:outputScript library="js" name="meujs.js" target="head"/> <h:graphicImage library="imagens" name="logo.jpg"/> ● #{resources['images:logo.jpg']} ● Exemplo de estrutura de diretórios:
  • 10. 10 / 49www.4linux.com.br AnotaçõesAnotações ● Com o JSF 2 é possível criar managed beans e atribuir um escopo, converters e validators com anotações sem utilizar nenhuma linha de XML no faces-config. ● Abaixo algumas anotações incluídas no JSF 2 @ManagedBean, @ManagedProperty @FacesValidator, @FacesConverter @ApplicationScoped, @SessionScoped, @RequestScoped, @ViewScoped, @NoneScoped, @CustomScoped ● O faces-config.xml pode ser utilizado apenas para regras de navegação mais complexas.
  • 11. 11 / 49www.4linux.com.br AJAX nativoAJAX nativo ● Nas versões 1.x do JSF é necessário a recorrer a frameworks JSF de terceiros, por exemplo, RichFaces, IceFaces, PrimeFaces. ● Abaixo um trecho de código utilizando JSF 1.2 <h:form id="formulario"> <h:panelGrid columns="2"> <h:inputText id="inputNome" value="#{usuarioMB.nome}"> <a4j:support event="onkeyup" reRender="outNome" /> </h:inputText> <h:outputText id="outNome" value="#{usuarioMB.name}" /> </h:panelGrid> </h:form>
  • 12. 12 / 49www.4linux.com.br AJAX nativoAJAX nativo ● Uma das principais melhorias no JSF 2 é a possibilidade de fazer requisições de forma nativa sem a necessidade de um utilizar um framework visual de terceiros para isso. ● Abaixo o mesmo trecho de código utilizando JSF 2.0 <h:form id="formulario"> <h:panelGrid columns="2"> <h:inputText id="inputNome" value="#{usuarioMB.nome}"> <f:ajax event="keyup" render="outNome"/> </h:inputText> <h:outputText id="outNome" value="#{usuarioMB.nome}" /> </h:panelGrid> </h:form>
  • 13. 13 / 49www.4linux.com.br Ajax nativoAjax nativo ● Nova API Javascript para requisições Ajax e acesso aos componentes: <h:outputScript name="jsf.js" library="javax.faces" target="head"></h:outputScript> ● jsf.specversion ● jsf.getProjectStage() jsf.ajax.addOnEvent(metodoDeCallback) / addOnError ● <h:commandButton id=”button1” action=”addComment” value=”Comentar” onclick=”jsf.ajax.request(this, event, {execute:'button1', render: 'status', onevent: handleEvent, onError: handleError}); return false;”/>
  • 14. 14 / 49www.4linux.com.br Ajax NativoAjax Nativo ● @all - Todos os components da página. ● @none – Nenhum componente da página. ● @this – O selemento que disparou o pedido. ● @form – O Formulário e os components desse formulário.
  • 15. 15 / 49www.4linux.com.br EscoposEscopos ● Com o JSF 2 novos escopos foram adicionados: @ViewScoped e @CustomScoped ● Utilizando CDI em substituição aos Managed Beans podemos utilizar o escopo de conversação: @ConversationScoped ● Para quem já estava acostumado a utilizar o JBoss Seam, o @ViewScoped é similar ao escopo de página e o @ConversationScoped similar ao escopo de conversação, já existentes desde a primeira versão do Seam.
  • 16. 16 / 49www.4linux.com.br View ScopeView Scope @ManagedBean(name="clienteMB") @ViewScoped public class ClienteMB { … } @Named(value="clienteMB") @ConversationScoped public class ClienteMB { … }
  • 17. 17 / 49www.4linux.com.br Navegação implícitaNavegação implícita ● No JSF 1.2 as regras de navegação obrigatoriamente precisavam ser configuradas no faces-config.xml <navegation-rule> <from-view-id>/usuario/boasvindas.xhtml</from-view-id> <navegation-case> <from-outcome>new</from-outcome> <to-view-id>/usuario/cadastrousuario.xhtml</to-view-id> </navegation-case> </navegation-rule>
  • 18. 18 / 49www.4linux.com.br Navegação implícitaNavegação implícita ● Com o JSF 2 basta apenas informar o caminho da view nas actions, eliminando a necessidade de criar todas as vezes regras de navegações no faces-config.xml public String novoUsuario() { usuario = new Usuario(); return "/usuario/cadastrousuario"; } ● Também podemos fazer da seguinte forma: <h:commandButton action="/usuario/cadastrousuario" value="Cadastrar usuário"
  • 19. 19 / 49www.4linux.com.br Navegação ImplicitaNavegação Implicita ● faces-redirect=true indica um redirecionamento do navegador. – /user/list.xhtml?faces-redirect=true ● Inclui a extensão .xhtml caso não tenha. ● Inclui / caso não tenha. ● Procura por uma view com esse viewId, por exemplo: – user/list => /user/list.xhtml ● Caso não encontre a view, a navegação implicita é encerrada, e torna a string um outcome. ●
  • 20. 20 / 49www.4linux.com.br Navegação condicionalNavegação condicional ● Diferentemente da navegação implícita, a navegação condicional e definida no faces-config.xml ● Oferece maior poder de controle para a tag <navigation- case> ● Feita através da tag <if> dentro de um <navigation-case> ● Podem ser adicionadas quantas tags <if> forem necessárias ● A tag <if> deve apontar para um método ou expressão que retorne um valor valor booleano. A regra de navegação somente será executada caso todas as tags <if> retornem true.
  • 21. 21 / 49www.4linux.com.br Navegação condicionalNavegação condicional <navigation-rule> <from-view-id> boasvindas.xhtml </from-view-id> <navigation-case> <from-outcome> edit </from-outcome> <if> #{usuarioBean.isAdmin} </if> <if> #{usuarioBean.idade > 18} </if> <to-view-id> cadastrousuario.xhtml </to-view-id> </navigation-case> </navigation-rule>
  • 22. 22 / 49www.4linux.com.br Bean ValidationBean Validation ● JSF 2 é compatível com a JSR 303 – Bean Validation ● É necessário que o ambiente ofereça suporte para o Bean Validation ● Possui mecanismos avançados e customizáveis de validação ● Proporciona maior reaproveitamento de código para o JSF pois as regras de validação não ficam vinculadas diretamente nas páginas
  • 23. 23 / 49www.4linux.com.br Bean ValidationBean Validation public class Cliente implements Serializable { @NotNull private Long id; @NotNull private String nome; @Size(max=30) private String sobrenome; @Past private Date dataNascimento; @Pattern(regexp = ".+@.+.[a-z]+" message="O e-mail informado não é válido") private String email; ...
  • 24. 24 / 49www.4linux.com.br Bean ValidationBean Validation <h:messages /> <h:form> <h:panelGrid columns="2"> Nome <h:inputText value="#{clienteMB.cliente.nome}" /> Sobrenome <h:inputText value="#{clienteMB.cliente.sobrenome}" > <f:validateBean disabled="true"/> – </h:inputText> – Email <h:inputText value="#{clienteMB.cliente.email}" /> Id <h:inputText value="#{clienteMB.cliente.id}" /> <h:commandButton action="page2" value="Enviar" /> </h:panelGrid> </h:form>
  • 25. 25 / 49www.4linux.com.br View ParametersView Parameters ● View Parameters servem para atribuir os valores da query string passados por uma requisição GET de forma apropriada para o bean (managed bean ou CDI) ● Utilizamos as tags <f:metadata> e <f:viewParam> para atribuir os valores da query string no bean <f:metadata> <f:viewParam name="id" value="#{clienteMB.cliente.id}"/> </f:metadata> ● ● Http://localhost:8080/client/show.xhtml?id=1
  • 26. 26 / 49www.4linux.com.br View ParametersView Parameters Utilizamos as tags <h:link> ou <h:button> para requisições GET <h:link outcome="editar" value="Editar"> <f:param name="id" value="#{cliente.id}"></f:param> </h:link> ● View Parameters podem ser utilizados para criar bookmarked links.
  • 27. 27 / 49www.4linux.com.br SelectItemsSelectItems ● No JSF 1.2 para utilizarmos componentes do tipo select one e select many de forma dinâmica era necessário ou criar uma lista de SelectItems ou um Map public List<SelectItem> getComboStatus(){ List<SelectItem> lista = new ArrayList<SelectItem>(); List<Status> resultado = getBuscaStatus(); for(Status s: resultado) lista.add(new SelectItem(s.id, s.nome)); return lista; }
  • 28. 28 / 49www.4linux.com.br SelectItemsSelectItems <h:selectOneRadio value="#{produto.status}> <f:selectItems value="#{produto.comboStatus}"/> </h:selectOneRadio> ● Com o JSF 2 não precisamos mais criar uma lista de SelectItems ● É possível passar um List para os componentes do tipo select one e select many ● Novos atributos foram adicionados na tag <f:selectItems> <h:selectOneRadio value="#{produto.status}> <f:selectItems value="#{produto.comboStatus}" var="s" itemLabel="#{s.nome}" itemValue="#{s.id}" /> </h:selectOneRadio>
  • 29. 29 / 49www.4linux.com.br Project StageProject Stage ● Com o JSF 2 é possível especificar no web.xml em quase fase do ciclo de desenvolvimento a aplicação se encontra <context-param> <param-name> javax.faces.PROJECT_STAGE </param-name> <param-value> Development </param-value> </context-param> ● Essa propriedade de configuração, permite que o JSF emita mensagens de erros mais completas no cliente, faciltando o desenvolvimento.
  • 30. 30 / 49www.4linux.com.br Project StageProject Stage ● Os valores possíveis são Development, UnitTest, SystemTest, Production, Extension. #{facesContext.application.projectStage} #{initParam['javax.faces.PROJECT_STAGE']} ● //Verificando através do enum de ProjectStage FacesContext facesContext = FacesContext.getCurrentInstance(); if (facesContext.isProjectStage(ProjectStage.Development)) { // executa determinada ação }
  • 31. 31 / 49www.4linux.com.br Composite ComponentsComposite Components ● Provê meios mais simples de criar um componente customizado, sem a necessidade de criar tlds ou estender Renders. ● Simplesmente utilizando tag é possível criar um componente. <html... xmlns:cc=”http://java.sun.com/jsf/composite/”> <cc:interface> <cc:attribute name="title"/> <cc:attribute name="description" required=”true”/> <cc:attribute name=”actionMethod” method-signature=”java.lang.String adicionar()” /> ● </cc:interface> ..
  • 32. 32 / 49www.4linux.com.br Composite ComponentsComposite Components <cc:implementation> <h:form> #{cc.attrs.title} - #{cc.attrs.description} <h:commandButton action=”#{cc.attrs.actionMethod}” value=”Confirmar”/> </h:form> </cc:implementation> </html>
  • 33. 33 / 49www.4linux.com.br Composite ComponentsComposite Components ● Utilizando um componente criado: <html... xmlns:mo=”http://java.sun.com/jsf/composite/moviecomp”> … <mo:moviebox title=”#{movie.title}” actionMethod=””/> </html>
  • 34. 34 / 49www.4linux.com.br Integração com CDIIntegração com CDI ● Integração com as especificações JSR 299 (CDI) e JSR 330 (DI) ● JSR 299: Provê uma arquitetura com escopes bom definidos. Também traz transiocionalidade a camada web. ● JSR 330: Provê conjunto de anotações para realizar injeção de dependência. ● É possível utilizar diretamente na view qualquer um EJB que utiliza CDI.
  • 35. 35 / 49www.4linux.com.br Integração com CDIIntegração com CDI @Stateless @LocalBean @Named("movieService") public class MovieManagerSessionBean { @PersistenceContext(unitName = "movie-persistence") private EntityManager entityManager; ….. <h:dataTable value="#{movieService.allMovies}" var="movie" styleClass="tabela" headerClass="header" rowClasses="odd,even">
  • 36. 36 / 49www.4linux.com.br JSF 2.2JSF 2.2 ● Nova especificação – JSR 344 ● Será lançado antes do Java EE 7 ● Proposed Final Draft Published = Março de 2012
  • 37. 37 / 49www.4linux.com.br JSF 2.2 – File UploadJSF 2.2 – File Upload ● File Upload nativo. ● Suporte a AJAX. ● Compatível com Portlets ● Será criado um novo componente <h:inputFile /> ● Possuirá atributos que permitirá o desenvolvedor habilitar ou não o uso de ajax, javascript, portlet e entre outros.
  • 38. 38 / 49www.4linux.com.br JSF 2.2 – viewActionJSF 2.2 – viewAction ComponentComponent ● Com o JSF 2.2 existe um novo componente chamado de viewAction que proporciona uma maneira mais fácil e rápida para fazer determinadas validações no lado do servidor ● Similar ao componente <s:viewAction> do Seam 3 ● <f:viewAction> é declarado como child de <f:metadata> <f:metadata> <f:viewParam name="id" value="#{produto.id}"/> <f:viewAction action="#{produto.verificaProduto}"/> </f:metadata>
  • 39. 39 / 49www.4linux.com.br JSF 2.2 – viewActionJSF 2.2 – viewAction ComponentComponent public String verificaProduto() { boolean isExists = verificaProduto(produto.id); if(!isExists) facesContext.addMessage(null, new FacesMessage("Produto não encontrado")); return null; } ● Links bookmarkable mais eficientes. Maior controle dos parâmetros GET
  • 40. 40 / 49www.4linux.com.br JSF 2.2 – viewActionJSF 2.2 – viewAction ComponentComponent ● A especificação do JSF 2 exige pelo menos um view parameter dentro de um view metadata para que ele seja executado, porém, o JSF 2.2 não possui esse pré- requisito ● Pode ser usado em qualquer fase do ciclo de vida do JSF <f:viewAction action="#{catalog.checkItem}" phase="UPDATE_MODEL_VALUES"/> ● Especificamos a fase do ciclo de vida do JSF através da constante da classe javax.faces.event.PhaseID
  • 41. 41 / 49www.4linux.com.br JSF 2.2 – viewAction eJSF 2.2 – viewAction e Navageção ImplícitaNavageção Implícita ● Compatível com regras de navegação <navigation-rule> <from-view-id>/index.xhtml</from-view-id> <navigation-case> <from-action> #{produdo.verificaProduto} </from-action> <if>#{!produto.isInvalido} </if> <to-view-id>/listaProdutos.xhtml</to-view-id> <redirect/> </navigation-case> </navigation-rule>
  • 42. 42 / 49www.4linux.com.br JSF 2.2 – DI em todos osJSF 2.2 – DI em todos os artefatos JSFartefatos JSF ● Até o JSF 2.1 somente era possível fazer DI para EJBs (@EJB), CDI (@Inject) e managed beans do JSF ● Mas e os Converters? Validators? Como eu faço DI de um EJB neles? ● JSF 2.0 e 2.1 = lookup ● JSF 2.2 = DI
  • 43. 43 / 49www.4linux.com.br JSF 2.2 – DI em todos osJSF 2.2 – DI em todos os artefatos JSFartefatos JSF @FacesConverter(value="br.com.fourlinux.videostore.conve rters.Movie") public class MovieConverter implements Converter { @Override public Object getAsObject(FacesContext context, UIComponent component, String value) { MovieManagerSessionBean movies; try { Context jndiContext = new InitialContext(); movies = (MovieManagerSessionBean) jndiContext .lookup("java:module/MovieManagerSessionBean"); ...
  • 44. 44 / 49www.4linux.com.br JSF 2.2 – DI em todos osJSF 2.2 – DI em todos os artefatos JSFartefatos JSF @FacesConverter(value="br.com.fourlinux.videostore.conve rters.Movie") public class MovieConverter implements Converter { @Override public Object getAsObject(FacesContext context, UIComponent component, String value) { @EJB MovieManagerSessionBean movies; ...
  • 45. 45 / 49www.4linux.com.br JSF 2.2 – Vários outrosJSF 2.2 – Vários outros recursosrecursos ● Gerenciar requisições ajax em um fila (queue control) ● Suporte a HTML 5 ● Maior integração com portlets
  • 46. 46 / 49www.4linux.com.br JSF 2 – FrameworksJSF 2 – Frameworks ● RichFaces 4 - http://www.jboss.org/richfaces ● PrimeFaces 2 - http://www.primefaces.org/ ● IceFaces 2 - http://www.icefaces.org/ ● MyFaces Trinidad 2.0 - http://myfaces.apache.org/trinidad
  • 47. 47 / 49www.4linux.com.br ReferênciasReferências ● http://www.jcp.org/en/jsr/detail?id=314 ● http://docs.jboss.org/seam/3/faces/latest/reference/en-US/html/components.html#viewaction ● http://java.net/jira/secure/IssueNavigator.jspa?mode=hide&requestId=10268 ● http://javaserverfaces-spec-public.java.net/
  • 48. 48 / 49www.4linux.com.br Código fonteCódigo fonte ● https://github.com/gabriel-ozeas/javaone2011 ● Para executar é necessário o maven ● mvn clean package cargo:run ● localhost:8080 cai direto na aplicação!
  • 49. 49 / 49www.4linux.com.br ObrigadoObrigado Gustavo Lira Gabriel Ozeas gustavo@4linux.com.br gabriel.ozeas@4linux.com.br www.4linux.com.br www.hackerteen.com twitter.com/4LinuxBR Tel: 55-11-2125-4747