Trabalhando com AJAX

abril 27, 2009

[Post em Rascunho]

Nesse post irei falar sobre como trabalharmos com AJAX no JSF.


<h:selectOneMenu id="mesAtual" value="#{principalBean.periodo.mesAtual}">
                               <f:selectItems value="#{principalBean.periodo.meses}"/>
                               <a4j:support ajaxSingle="false" event="onchange" reRender="tabelaHorasTrabalhadas,anoAtual,panelDados" actionListener="#{principalBean.pesquisarPeriodo}"/>
                        </h:selectOneMenu>
[/sourcecode language="xml"]



public void pesquisarPeriodo(ActionEvent event){

}

Anúncios

Nesse post simples pretendo discutir sobre como imprimir enviar mensagens para serem mostradas em componentes tipo <h:messages/> e como deixar as mensagens de validação em português.

Primeiramente,  vamos definir onde colocar as mensagens. Em Java, a forma mais simples de se fazer isso é configurando um arquivo de properties na sua aplicação. Chamamos isso de um message bundle.  Esse tipo de arquivo guarda informações do tipo chave=valor. Um exemplo seria:  sistemaMidias.erro.apagarMidiaInexistente=A mídia que se está tentando apagar não existe. Vamos definir esse arquivo dentro do diretório Web Pages da sua aplicação com o nome de mensagens.properties. Coloque as mensagens da forma que você quiser, lembrando que o conteúdo do lado esquerdo da vírgula sempre será a chave e o do direito o valor. É pela chave que você solicitará ao JSF para mostrar a mensagem específica.

As mensagens que definimos no arquivo mensagens.properties podem ser de dois tipos: mensagens específicas da aplicação em questão e mensagens de componentes do JSF. Quanto as mensagens desse segundo tipo, vamos conversar um pouco. Como os componentes em JSF são programados em inglês, as mensagens de erro também o são. Por exemplo, se um componente for definido como required=true, será mostrada uma mensagem em inglês dizendo “The field xyz is required”. Para deixarmos essas mensagens dos componentes JSF em inglês precisamos sobrescrevê-las em nossas aplicações. Para isso, basta colocar as chaves dessas mensagens no arquivo mensagens.properties que criamos para nossa aplicação e colocar os valores necessários. Alguns exemplos de mensagens que os componentes do JSF mostram, que poderíamos deixá-las em português, são:

javax.faces.component.UIInput.REQUIRED={0}: Preenchimento obrigatório.
javax.faces.converter.BigIntegerConverter.BIGINTEGER={0} deve ser um número de um ou mais dígitos.

javax.faces.converter.IntegerConverter.INTEGER={2}: deve ser um número de um ou mais dígitos.
javax.faces.converter.LongConverter.LONG={2}: deve ser um número de um ou mais dígitos.

Perceba que o que está entre chaves {} é o índice de um parâmetro para a mensagem. Por exemplo, para a mensgem javax.faces.component.UIInput.REQUIRED a parte do valor {0} será substituído pelo nome do componente.

Para uma lista mais completa de mensagens, clique aqui.

Definindo o arquivo mensagens.properties no faces-config.xml

Após definir as mensagens necessárias para o sistema, resta apenas configurar o arquivo faces-config.xml para referenciar esse arquivo de mensagens. Para isso, insira dentro do arquivo as seguintes tags:

<application>
 <message-bundle>mensagens</message-bundle>
 </application>

Mostrando mensagens em nossas páginas

Como foi visto acima, as mensagens que já foram definidas pelos componentes JSF, e que sobrescrevemos no arquivo mensagens.properties, serão mostradas automaticamente pelo JSF. Mas as mensagens que definimos especificamente para o nosso sistema precisamos colocar no “saco” de mensagens do JSF para que ele mostre.

Para isso, precisamos colocar um componente do tipo mensagem <h:messages/> em uma página e colocar no backing bean, no método action que se queira mostrar alguma mensagem, quer seja por erro ou algum aviso, as seguintes linhas:

FacesContext fc = FacesContext.getCurrentInstance();
 fc.addMessage("nomeComponenteDeMensages", MessageFactory.getMessage("sistemaMidias.erro.apagarMidiaInexistente",new String[]{}));

Percebeba que o primeiro parâmentro do método addMessage é o nome do componente de mensages da página JSF, p segundo é a mensagem cuja chave seja a que foi passado como parâmetro em MessageFactory.getMessage e o terceiro parâmetro são os possíveis parâmetros, em formato String, que podem ser passados para uma mensagem (com o uso de chaves {}).