A versao 2 do Java Server Faces e significativamente melhor do que a versao 1 em varios aspectos. Trazendo, sobretudo, conceitos que foram incluidos anteriormente no JBoss Seam, a nova especificacao possui inumeras vantagens que facilitam a vida do desenvolvedor.Vamos a um levantamento delas:Mudancas do Core do JSFAnotacoes nas classes substituiram varias entradas no faces-config.xml. Exemplos:Managed Bean: @ManagedBean. Exemplo:Antes (jsf 1.x):1<managed-bean>2 <managed-bean-name>carroBean</managed-bean-name>3 <managed-bean-class>br.com.projeto.bean.CarroBean</managed-bean-class>4 <managed-bean-scope>request</managed-bean-scope>5</managed-bean>Agora (jsf 2):1@ManagedBean2public class CarroBean {3 4}Converter: @FacesConverter. Exemplo:Antes (jsf 1.x):1<converter>2 <converter-id>converter.ConversorDeCpf</converter-id>3 <converter-class>br.com.projeto.converter.ConversorDeCpf</converter-class>4</converter>Agora (jsf 2):1@FacesConverter("converter.conversorDeCpf")2public class ConversorDeCpf implements Converter {3 4}Validator: @FacesValidator. Exemplo:Antes (jsf 1.x):1<validator>2 <validator-id>validator.validadorDeCpf</validator-id>3 <validator-class>br.uece.projeto.validator.ValidadorDeCpf</validator-class>4</validator>Agora (jsf 2):1@FacesValidator("validator.validadorDeCpf")2public class ValidadorDeCpf implements Validator {3 4}Podem ser usados nomes default. Por exemplo: se a classe que possui a anotacao @ManagedBean se chama pacote1.pacote2.MeuBean, voce pode usar #{meuBean.atributo} no codigo;O escopo view foi adicionado. A ideia e manter determinados dados enquanto o usuario nao mudar de tela. As instancias dos managed beans em escopo view sao eliminadas somente quando ha uma navegacao entre telas;Managed Beans possuem escopo request por padraoPara especificar escopo use @RequestScoped, @ViewScoped, @SessionScoped e@ApplicationScoped nos Managed Beans.Por padrao, a instancia de um managed bean em escopo application e criada no momento em que ela e usada pela primeira vez. Podemos alterar esse comportamento, fazendo com que essa instancia seja criada quando a aplicacao e inicializada. Basta acrescentar a propriedade eager com o valor true na anotacao @ManagedBean;Novos botoes <h:button /> e <h:link /> realizam requisicoes HTTP do tipo GET. As URLs das requisicoes sao geradas pelo JSF a partir do atributo outcome. Nao devem ser utilizados para submissao de formularios;Novo componente <h:outputFormat />. Permite diversos tipos de formatacao do texto que sera exibido. Exemplo:1<h:outputFormat value="Preco do carro {0}: R$ {1}">2 <f:param value="#{carroBean.carro.nome}"/>3 <f:param value="#{carroBean.carro.preco}"/>4</h:outputFormat>Podemos alterar o comportamento padrao do JSF, fazendo com que ele considere o conteudo de uma caixa de texto nao preenchida como null. Esse comportamento e obtido acrescentando o seguinte trecho no arquivo web.xml:1<context-param>2 <param-name>javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL</param-name>3 <param-value>true</param-value>4</context-param>Para padronizar a organizacao dos recursos da sua aplicacao e facilitar a internacionalizacao, o JSF 2 permite a criacao de bibliotecas de imagens e o uso das novas tags <h:outputScript /> e <h:outputStylesheet />:A criacao de uma biblioteca de imagens e simples: adicione um diretorio na pasta /resources (na raiz da aplicacao). Por exemplo, se criarmos o diretorio /resources/carros/ e adicionarmos a imagem golf.png nesse diretorio, podemos inseri-la em uma pagina da seguinte forma:1<h:graphicImage library="carros" name="golf.png" />As tags <h:outputScript /> e <h:outputStylesheet /> devem ser usadas com a notacao:1<h:outputScript name="mascara-carro-brasil.js" library="javascript"target="head" />2<h:outputStylesheet name="estilo-carro-brasil.css" library="css" />Suporte integrado a faceletsJSF 2 despreza o JSP como linguagem da camada de visao;Possibilidade de utilizar bookmarking;Suporte nativo a Ajax;Suporte nativo a Groovy;Mais detalhes no debugColocando o valor Development na configuracao javax.faces.PROJECT_STAGE do web.xml, aparecerao mensagens de erro mais explicitas que antes nao eram disparadas na versao 1.x. Exemplo:1<context-param>2 <param-name>javax.faces.PROJECT_STAGE</param-name>3 <param-value>Development</param-value>4</context-param>Nao e mais necessario usar regra de navegacao (navigation-rule) no faces.config.xml. Basta que o nome da pagina corresponda a string retornada pela action ou pelo componente;Exemplo: se a sua pagina se chama formulario.xhtml e ela esta na raiz do conteudo web, voce pode redirecionar para formulario.jsf;Podemos criar navegacoes condicionais. Imagine uma aplicacao em que os usuarios