podem escolher o idioma que desejam utilizar. As regras de navegacao podem entao considerar essa situacao atraves da tag na definicao de uma regra de navegacao. Veja o exemplo:01<navigation-rule>02 <from-view-id>/login.xhtml</from-view-id>03 <navigation-case>04 <from-outcome>sucesso</from-outcome>05 <if>#{usuarioBean.idioma[preferencia] == pt-BR}</if>06 <to-view-id>/home-brasil.xhtml</to-view-id>07 </navigation-case>08 <navigation-case>09 <from-outcome>sucesso</from-outcome>10 <if>#{usuarioBean.idioma[preferencia] == en-US}</if>11 <to-view-id>/home-internacional.xhtml</to-view-id>12 </navigation-case>13</navigation-rule>Voce pode usar #{meuBean.meuAtributo} diretamente na pagina ao inves de <h:outputText value=#{meuBean.meuAtributo} />;Esta mais simples desenvolver componentes. Agora a programacao deles esta baseada no facelets e nao no proprio java, como era antes;Uma nova abordagem para definir validacoes. A ideia e declarar as regras de validacao nas classes do modelo atraves de anotacoes ao inves de inseri-las nos arquivos XHTML que definem as telas. O recurso usado foi o Bean Validation, especificado na JSR 303. As opcoes sao:AnotacaoUtilidadeChave no Arquivo properties@AssertTrueVerifica se uma propriedade booleana possui valor false.{javax.validation.constraints.AssertTrue.message}@AssertFalseVerifica se uma propriedade booleana possui valor true.{javax.validation.constraints.AssertFalse.message}@DecimalMaxDefine o valor real maximo que uma propriedade pode armazenar.{javax.validation.constraints.DecimalMax.message}@DecimalMinDefine o valor real minimo que uma propriedade pode assumir.{javax.validation.constraints.DecimalMin.message}@DigitsDefine a quantidade maxima de digitos da parte inteira (atraves do atributo integer) ou da parte fracionaria (atraves do atributo fraction) de um numero.{javax.validation.constraints.Digits.message}@FutureVerifica se uma data e posterior ao instante atual.{javax.validation.constraints.Future.message}@MaxDefine o valor inteiro maximo que uma propriedade pode assumir.{javax.validation.constraints.Max.message}@MinDefine o valor inteiro minimo que uma propriedade pode assumir.{javax.validation.constraints.Min.message}@NotNullVerifica se o valor de uma propriedade nao e null.{javax.validation.constraints.NotNull.message}@NullVerifica se o valor de uma propriedade e null.v{javax.validation.constraints.Null.message}@PastVerifica se uma data e anterior ao instante atual.{javax.validation.constraints.Past.message}@PatternVerifica se o valor de uma propriedade respeita uma expressao regular.{javax.validation.constraints.Pattern.message}@SizeDefine os tamanhos minimo (atraves do atributo min) e maximo (atraves do atributo max) para uma Collection, array ou String.{javax.validation.constraints.Size.message}Tabela 1: anotacoes do Bean Validator.E possivel desabilitar a validacao de uma propriedade com anotacao em uma ou mais telas especificas com a tag <f:validateBean> e o atributo disable com o valor true. Exemplo:1<h:inputText value="#{carroBean.carro.nome}">2 <f:validateBean disabled="true" />3</h:inputText>As mensagens do bean validation podem ser personalizadas. Exemplo: @NotNull (message =O nome nao pode ser nulo )Nesse caso estamos usando uma mensagem fixa, nao dando suporte para internacionalizacao;Tambem e possivel mapear a mensagem da annotation a uma chave de um arquivo resource-bundle. Exemplo: @NotNull(message={br.com.projeto.funcionario.nome})Essa solucao e recomendada quando queremos usar uma mensagem personalizada e a chave deve ser inserida em um arquivo chamado ValidationMessages.properties, que deve ser colocado no classpath da aplicacao;Outra opcao e alterar as mensagens padroes dos validadores do bean validation. Nesse caso nao precisamos usar o atributo message da Annotation. Basta usar as chaves que estao na tabela 1 publicada no mesmo arquivo comentado no item anterior.Mudancas do FaceletsSuas paginas devem terminar com .xhtml;Use <h:head>, <h:body> e <h:form>;Em geral, nao e necessario usar mais <f:view>;