O documento apresenta as principais novidades do JSF 2.2, incluindo seis grandes funcionalidades (HTML5 Friendly Markup, Faces Flows, Cross Site Request Forgery Protection, Upload de Arquivos, Carga de Facelets via ResourceHandler e Multi-templating) e 28 funcionalidades médias e 44 correções de defeitos menores. O projeto ScrumToys é apresentado como uma oportunidade para a comunidade contribuir com o desenvolvimento do JSF 2.2.
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
Novidades do JSF: Um tour completo no JSF 2.2
1. Novidades do JSF
Um tour completo no JSF 2.2
Alberto Lemos (Dr. Spock)
Senior Software Architect
SpockNET
2. Agenda
• Sobre o JSF 2.2
• Roadmap
• Novas funcionalidades
• Ajudando a evoluir o JSF
• O projeto ScrumToys
3. Sobre o JSF 2.2
• Especificação em
desenvolvimento para o
Java EE 7
• JSR-344
• Arquitetura de componentes
visuais para aplicações Web
• Lógica de UI principalmente
no lado do servidor
4. Sobre o JSF 2.2
• Estabelece separação entre
definição de componentes da
respectiva renderização
• Permite os componentes ter
o próprio “patch” da UI
• Ciclo de vida bem definido:
Inversão de controle
5. Objetivo
“Prover uma tecnologia Java padrão para
construir aplicações Web rapidamente, fácil de
manter, localizável, acessível, segura,
independente do dispositivo, boa apresentação
e legal de usar!”
6. Linha do tempo JSF/JSR
• JSR 127 (struts) • JSR 314 (Java EE 6)
• JSF 1.0 Março 2004
• JSF 2.0 Julho 2009
• JSF 1.1 Maio 2004
• JSF 2.1 Julho 2010
• JSR 252 (Java EE 5)
• JSF 2.1 Manutenção R2
• JSF 1.2
Novembro 2010
May 2006
• JSF 1.2 Manutenção R1 • JSR 344
•
Dezembro 2006
JSF 1.2 Manutenção R2
• Iniciado em Abril 2011
Junho 2008 • Early Draft review
• JSF 1.2 Manutenção R3 Dezembro 2011
Agosto 2008
• JSF 2.2 Public Draft review
Dezembro 2012
7. Roadmap
• Java EE 7 Roadmap
• Previsto para finalizar no Outono 2013
• https://blogs.oracle.com/theaquarium/entry/
java_ee_7_roadmap
• JSF 2.2
• Será finalizado junto com o Java EE 7
• Executará em contêiners Java EE 6
9. Novas funcionalidades
• Agrupados em três grupos por
tamanho/importância:
• Large (6)
http://bit.ly/JCP_20120911_BIG_TICKET
• Medium (28)
http://bit.ly/JCP_20120911_MEDIUM
• Small (44)
http://bit.ly/JCP_20120911_BUG_FIXES
11. Six Big Tickets
• HTML5 Friendly Markup
• Faces Flows
• Cross Site Request Forgery
Protection
• Componente de Upload
• Carga de Facelets via
ResourceHandler
• Multi-templating
12. HTML 5 Friendly Markup
• Telas JSF são escritos numa VDL (View
Declaration Language)
• VDL Facelets é um arquivo XML com dois tipos
de elementos:
• HTML
• Componentes JSF
• HTML é repassado para o Navegador
• Componentes JSF são interpretados no servidor
13. HTML 5 Friendly Markup
• Antes do JSF 2.2:
• Tags JSF escondem HTML / JS / CSS / Img
• Renderizadores: Geram HTML e processam
parâmetros recebidos do navegador
<html>...
<p:colorPicker value=“#{colorBean.color2}” />
<p:calendar value=“#{calendarBean.date1}” />
</html>
• Não suporta uma funcionalidade do Navegador?
Escreve um novo componente!
14. HTML 5 Friendly Markup
• Com o JSF 2.2:
• HTML puro com JS / CSS / Img
• Renderizadores: processam parâmetros
recebidos do navegador
<html>...
<input type=“color” jsf:value=“#{colorBean.color2}” />
<input type=“date” jsf:value=“#{calendarBean.date1}” />
</html>
• Não suporta uma funcionalidade do Navegador?
Use “pass through elements!
15. Faces Flows
• Define o conceito de um “Flow”
• Padroniza tecnologias presentes em:
• ADF Task Flows
• Spring Web Flow
• Apache MyFaces CODI
• Seam Framework Flows
• Dica: Um Flow é análogo a um método Java!
16. Faces Flows
• Pode ser “chamado” de qualquer ponto da
aplicação
• Único ponto de entrada
• Aceita parâmetros de entrada e saída
• Define um novo escopo: facesFlowScope
• Nova anotação CDI: @FlowScoped
17. Faces Flows
• Navegação não é mais entre páginas
• Navegação agora é entre nós de “flows”
• Define tipos de nós:
• View - Representa uma página
• Method Call - Invoca método via EL desacoplado de UI
• Switch - Representa pontos de decisão num “flow”
• Flow Call - Representa uma invocação de outro “flow”
• Flow Return - Representa o retorno um “flow”
20. Empacotando um Flow
• Estrutura de empacotamento num JAR:
• META-INF/beans.xml
• META-INF/flows/{flowName}/{flowName}-flow.xml
• META-INF/flows/{flowName}/{viewNode}.xhtml
• {javaPackagePath}/{javaClassName}.class
• JAR é adicionado no Classpath (/WEB-INF/lib)
• Fragmentos reusáveis de aplicação podem ser construídos, testados e
distribuídos.
21. Cross-Site Request Forgery
• O que é “Cross-Site Request Forgery”?
(CSRF pronuncia “see-surf”)
http://en.wikipedia.org/wiki/Cross-site_request_forgery
• Ataque que força o usuário final executar
ações indesejadas numa aplicação Web no
qual está devidamente autenticado.
22. Cross-Site Request Forgery
• JSF 2.2 encripta, por default, o “view state”
• A cada requisição verifica:
• Se é uma tela “protegida”, ou
• Se é uma requisição de uma tela
“protegida”, ou
• Se o “referrer” da requisição é originária
da aplicação Web
23. Upload de Arquivos
• Implementação atual não tem suporte a Ajax
• A versão final da especificação suportará Ajax
<h:inputFile id="file" value="#{fileUploadBean.uploadedFile}">
<f:validator validatorId="FileValidator" />
</h:inputFile>
24. Upload de Arquivos
@ManagedBean
@RequestScoped
public class FileUploadBean {
private Part uploadedFile; // getter/setter
public String getFileText() {
String text = "";
if (null != uploadedFile) {
try {
InputStream is = uploadedFile.getInputStream();
text = new Scanner( is ).useDelimiter("A").next();
} catch (IOException ex) {}
}
return text;
}
}
25. Upload de Arquivos
@FacesValidator(value="FileValidator")
public class FileValidator implements Validator {
@Override
public void validate(FacesContext context, UIComponent component,
Object value) throws ValidatorException {
Part file = (Part) value;
try {
InputStream is = file.getInputStream();
text = new Scanner( is ).useDelimiter("A").next();
} catch (Exception ex) {
throw new ValidatorException(“”, ex);
}
if (!text.contains("JSR-344")) {
throw new ValidatorException(
new FacesMessage("Invalid file”);
}
}
26. Carga de Facelets via
ResourceHandler
• JSF 2.0 Adicionou:
• Facelets
• ResourceHandler
• Estes conceitos não eram
unificados
• Agora são unificados!
• Tudo é carregado via
ResourceHandler!
27. Multi-templating
• Facelets permite padronizar elementos
de página
• Multi-templating permite padronizar
elementos de site:
• sidebar
• menu de navegação
• área de conteúdo
• Permite definir um contrato e suportar
“skinnability”
• Multi-templates podem ser
empacotados em JARs
33. 44 correções de
defeitos
• Ajax
• EL
• Facelets
• Lifecycle
• Especificação de erros
• Componentes/Renderizadores
• Recursos
34. Contribuindo com a
evolução do JSF 2.2
• JSR-344 está sobre o JCP 2.8
• Transparência e acesso da comunidade
• 1o. Passo: Listas de email
- users@javaserverfaces-spec-public.java.net
- jsr344-experts@javaserverfaces-spec-
public.java.net
• 2o. Passo: Estudar a especificação e
testar a implementação
- http://jsf-spec.java.net/
- http://jsf.java.net/
35. Contribuindo com a
evolução do JSF 2.2
• 3o. Passo: Iniciativa adote uma JSR
- http://soujava.org.br/servicos/adopt-a-jsr/
• 4o. Passo: Participar do projeto
ScrumToys
- scrumtoys@spock.com.br
38. Mais informações
• What’s New in JSF: A Complete Tour of JSF 2.2
http://bit.ly/VCo88k
• What’s new in JSF 2.2?
http://jdevelopment.nl/jsf-22/
• JavaServer Faces Community
http://javaserverfaces.java.net/
• JSR-344: JavaServer Faces 2.2
http://bit.ly/jsr344
39. Obrigado!
• Contato:
Dr. Spock
javaone@spock.com.br
• Twitter:
@drspockbr
• About me:
http://about.me/drspockbr