JavaServer Faces 2.0 - Early Draft Review 2
Posted on | setembro 25, 2008 |
Saiu o segundo rascunho da especificação do JSF 2.0, no entanto ainda não há uma versão da implementação da EDR2 disponível para download como já saiu para a EDR1.
Primeiramente, vou me basear nas diferenças entre as reviews 1 e 2, mas isso não significa que o que vou falar aqui é inédito pois podemos ver na net diversos post comentando o que vem por aí. E também ainda não li tudo, a idéia é compartilhar o que mais me chamou a atenção nesse primeiro contato.
FacesContext
Sem dúvida essa é uma das classes que mais manipulamos no JSF, e nela temos algumas funcionalidades novas interessantes:
- getCurrentPhaseId() - Disponível desde a EDR1, devolve um PhaseId. Pode ser bem útil para fazermos algumas coisas só depois de uma dedeterminada fase.
- getExecutePhaseClientIds() - Devolve uma List<String>. Guarda uma lista com os client ids dos componentes que serão processados na requisição atual. Isso porque o JSF2 tem nativamente o suporte à ajax, e submissão parcial da página.
- getPartialResponseWriter() - Devolve o ResponseWriter para os componentes de uma renderização parcial.
- getRenderPhaseClientIds() - Devolve uma List<String> contendo os client ids dos componentes que serão renderizados em uma renderização parcial.
- isAjaxRequest() - devolve um boolean dizendo se a requisição é ajax (auto explicativa né
) - isExecuteNone() - retorna true se for uma submissão parcial mas nenhum componente precisará ser processado. Seria como dar apenas um reRender usando o ajax4jsf mas sem mandar executar nada.
- isPostback() - método “atalho” para ResponseStateManager.isPostback(FacesContext).
- isRenderAll() - Retorna true se for uma requisição ajax, isRenderNone() retornar falso, e
getRenderPhaseClientIds() retornar uma lista vazia. - isRenderNone() - Retorna true caso for para executar uma renderização parcial, mas a lista de componentes a renderizar for vazia. Imagine uma requisição ajax que só envia dados ao servidor.
Para os métodos get dessa lista, também tem os respectivos set.
Annotations
Uma coisa que todo mundo esperava está disponível no EDR2, que é a possibilidade de anotar nossos managed beans com @ManagedBean, @FacesValidator, @FacesConverter e @FacesComponent entre outros.
Para quem já está habituado com o Seam vai se sentir bem a vontade, pois as anotações seguem o mesmo estilo.
Apesar de no começo parecer estranho esse prefixo “Faces” em todas essas anotações, fica útil para não confundir com as interfaces com o mesmo nome. Sem isso (no Seam é assim), como importamos a anotação e a interface com o mesmo nome, uma das duas tem que ficar com o nome totalmente especificado. Não que seja problema, mas com esse prefixo fica mais “limpinho”.
@ManagedBean
- name - nome do managed bean
- scope- escopo. O que não pareceu tão legal é que a gente passa uma String (”request”, “session” ou “application”), quando seria mais bacana uma Enum como o Seam faz. O valor default é “none”.
- eager - se for true, o managed bean será startado junto com a aplicação, e o “escope” passado será ignorado, e o managed bean será do escopo application. Se for false, fica como é hoje (lazy). O default é false.
@FacesConverter
- value - string que representa o converter-id do conversor
- forClass - passamos o java.lang.Class da classe que queremos registrar o conversor na forma de converter-for-class
@FacesValidator
- value - string que representa o validator-id do validador
@FacesComponent
- value - string que representa o component-type do UIComponente
Facelets 2
O outro assunto que de cara me interessou foi a integração do JSF com o Facelets, pois já uso Facelets há um bom tempo e nem me imagino fazendo uma aplicação em JSF sem ele. Tanto que até escrevi uma matéria pra a MundoJava sobre Facelets e as novidades do JSF 1.2. Na época eu comentei sobre a versão 1.2 do Facelets que nunca chegou a sair, talvez porque o pessoal passou a investir no JSFTemplating ou quem sabe viram que compensaria partir logo para um 2.0. Mas no Facelets 1.2 já podíamos ver o que provavelmente foi a base da API de Ajax para o JSF2.
No JSF2 temos o chamado PDL (Page Declaration Language), que é uma abstração para os mecanismos de definição de páginas disponíveis para o JSF, que até agora são JSP e Facelets. Porém se a gente der uma espiadinha no projeto JSFTemplating, podemos ver que existe a possibilidade de usarmos outras coisas, como Groovy por exemplo. Então é bem possível que vejamos coisas parecidas para o JSF2. Só para concluir a idéia, já é possivel usar Groovy em vez de xhtml para construir telas com Facelets, usando Gracelets. É bem bacana e eu já fiz uns testes que depois vou postar aqui também. Mas vamos voltar ao assunto.
Na EDR2 é explicado como será mantida a compatibilidade retroativa com as aplicações que usam Facelets. Basicamente será procurando dentro das classes da nossa aplicação ou das dependencias dela se existe alguma dependencia de classes do pacote com.sun.facelets e/ou dos seus subpacotes. Se houver, o Facelets embarcado no JSF não vai rodar, e as coisas vão continuar como estão, onde quem roda é o facelets que está no jar da nossa aplicação. Agora se não houver dependencia com as classes do Facelets atual, o Facelets2 entra em ação.
Composition Component com JSF/Facelets 2
Primeiramente, seria interessante dar uma olhada no suporte a recursos do JSF2 para entendermos melhor como tudo vai funcionar. Vou seguir o exemplo da documentação para facilitar.
daqui para frente tem diversos exemplo de código, então não vou colar aqui. Quem tiver interesse pode ver na íntegra.
Comments
One Response to “JavaServer Faces 2.0 - Early Draft Review 2”
Leave a Reply

setembro 26th, 2008 @ 6:13 am
Boa news, fiquei sabendo do JUGMS pelo Blog Gilliard. Muito bom a iniciativa de vocês daqui do MS de ter um bom site de informaçoes JAVA. Sou de Campo Grande e brinco com JAVA também. Sempre que possível, visitarei aqui. Sucesso pra todos.
Willian Lugo