JSF 2 - NOVIDADES

Embed Size (px)

Citation preview

JSF 2: NOVIDADES 1 - Configurao de ManagedBeans por anotao, no lugar de XML; 2 - Navegao implcita; 3 - Navegao condicional; 4 - Suporte a Bookmarkable URLs; 5 - Suporte a ajax; 6 - Sistema de comportamentos plugaveis; 7 - Facelets como tecnologia padro de templates; 8 - Melhor suporte tratamento de excees; 9 - Configurao de Converters, Validators, Components, Renderes e Behavior por anotao, no lugar de XML; 10 - Suporte componentes compostos; 11 - Integrao com a API Beans Validation; 12 - Melhor suporte a callbacks nas fases do ciclo de vida das requisies JSF. 13 - Parametros nos actions Navegao Implicita Antigamente as suas regras de navegao precisavem ser registradas no faces-config.xml assim:view plaincopy to clipboardprint?

1. 2. /person/people.xhtml 3. 4. edit 5. /person/edit.xhtml 6. 7.

Agora vc no precisa mais disso. Basta vc informar o cominho da view sem a extenso:view plaincopy to clipboardprint?

1. public String action() { 2. return "/person/edit"; 3. }

Assim o JSF vai procurar por um arquivo chamado edit.xhtml dentro do diretrio person. Se vc precisar redirecionar basta adicionar "&faces-redirect=true" no final da sua regra de navegao e pronto. Navegao Condicional Se vc estiver usando navegaes declarativas (aquelas no faces-config) ento vc pode fazer algo assim:view plaincopy to clipboardprint?

1. 2. /page1.xhtml 3. 4. edit 5. #{page1Bean.isEditionAllowed} 6. /edit.xhtml 7. 8.

Onde a expresso passada no IF deve resolver um mtodo de um ManagedBean q retorne um boolean. Nesse caso a navegao s ser executada se esse mtodo retornar true. Bookmarkable URLs

Antes o JSF s suportava requisies POST e as navegaes aconteciam no servidor atravs de um mecanismo chamado forward. Isso causava dois problemas: 1 - as navegaes post passam parmetros "implicitamente", ou seja, os parmetros no apareciam na URL. Assim, se vc precisasse de um parmetro p/ navegar pgina certa, digamos o ID do produto do qual vc quer visualizar os detalhes, ento no era possvel p/ o usurio salvar a URL desse produto nos favoritos do seu browser. 2 - as URLs das views ficavam sempre atrasadas pois os posts do JSF eram sempre feitos de volta p/ a pgina original. Agora possvel usar GETs p/ acessar pginas JSF.view plaincopy to clipboardprint?

1. 2. 3. 4.

2. 3. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.

Vc, ento pode salvar esse arquivo em um diretrio "/resources/ezcomp" dentro de WebContent com o nome "inputText.xhtml" e usa-lo assim:view plaincopy to clipboardprint?

1. 2. 3.

Callbacks do Ciclo de Vida Digamos q vc queira modificar a sub-rvore de um componente especfico dinmicamente, tipo em cdigo. Agora vc pode adicionar um callback no processo de construo da rvore de componentes:view plaincopy to clipboardprint?

1. 2. 3.

E no bean:

view plaincopy to clipboardprint?

1. public void callback(ComponentSystemEvent e) { 2. // aqui vc pode construir dinmicamente a rvore de componentes do h:form. 3. }

Ainda existem dois outros recursos q eu esqueci de citar. Gernciamento de recursos e passagem de parmetros p/ actions. Gernciamento de Recursos Basta vc adicionar os recursos em um diretrio "/resources" no seu WebContent e substituir

as tags head e body do html por h:head e h:body. Ai, p/ vc adicionar recursos como css, javascript e imagens:view plaincopy to clipboardprint?

1. 2. 3.

O target indica em q parte (h:head ou h:body) vc deseja ecoar esses recursos. Isso evita de vc fique escrevendo full-path urls p/ acessar esses recursos. Parmetros nos actions Isso muito legal!! Agora vc pode passar parmetros em mtodos action dos beans gerenciados. Tipo, digamos q vc tenha um dataTable com botes editar p/ cada linha. Vc quer q quando o usurio clicar ele seja direcionado p/ um pgina com os dados dessa linha p/ q possam ser editados. No JSF1.x vc precisava de componentes f:setPropertyActionListener p/ isso (q saco). Mas com JSF2 vc pode:view plaincopy to clipboardprint?

1. 2. 3. 4. Actions 5. 6. 7.

E no seu ManagedBean:

view plaincopy to clipboardprint?

1. public String edit(Product product) { 2. this.product = product; 3. return "/product/edit"; 4. }

Ademais existem algumas pequenas melhorias como vc no precisar mais de objetos SelectItem p/ construir um selectOneMenu, mas os principais so esses ai.