- Sincronização dos contextos de Mensagens do Demoiselle e do JSF
O Framework Demoiselle prove ao desenvolvedor um contexto de mensagens que pode ser utilizado em todas as camadas da aplicação. Neste contexto o desenvolvedor pode cadastrar diversos tipos de mensagens, nas diversas camadas da aplicação, exemplos: Erros de negócio, informações e erros na persistência, indisponibilidade de serviços, entre outras.
A partir da versão 1.2 do Framework, o módulo view prove uma funcionalidade para automatizar a exibição destas mensagens na páginas JSF da aplicação. Para isso, o desenvolvedor necessita cadastrar um PhaseListener no arquivo faces-config.xml. A cada requisição do usuário, o Listener irá buscar todas as mensagens do contexto do demoiselle e irá incluir estas no contexto JSF (FacesContext).
Exemplo de uso
Passo 1 – Configuração do faces-context.xml (habilitar o mecanismo)
<faces-config>
…
<lifecycle>
<phase-listener>br.gov.framework.demoiselle.view.faces.message.MessageContextListener</phase-listener>
</lifecycle>
…
</faces-config>
Passo 2 – Configuração do demoiselle.properties (Opcional)
Para definir o locale que será usado nas mensagens basta adicionar a seguinte linha no arquivo demoiselle.properties
framework.demoiselle.view.faces.locale.priority = …
As opções são:
CLIENT: Utiliza o locale do cliente que está contido na variável request (Opção default)
APPLICATION: Utiliza o locale do JSF que está defido no arquivo web.xml
DEFAULT_VM: Utiliza o locale default da maquina virtual java (JVM)
Mais informações: https://sourceforge.net/apps/mantisbt/demoiselle/view.php?id=363
- Tratamento de exceções na camada de visão
Na versão 1.2, o módulo view prove, opcionalmente, um tratamento para exceções geradas durante a execução de uma requisição que está sendo processada dentro de algum método do managed bean. A funcionalidade é implementada através de um ActionListener o qual deve ser adicionado para execução no arquivo web.xml.
O DemoiselleActionListenerImpl monitora exceções e caso identifique alguma, executa os passos abaixo para tratar esta:
1. Adiciona a mensagem da exceção no contexto JSF (FacesContext)
2. Define a página de destino da requisição, seguindo a seguinte ordem de prioridade:
- Anotação Navigation no método do Managed Bean
- Anotação Navigation na classe da exceção gerada
- Se mantem na mesma página da requisição
Exemplo de uso
Passo 1 – Adicionar o action listener no faces-context.xml
<application>
…
<action-listener>br.gov.framework.demoiselle.view.faces.DemoiselleActionListenerImpl</action-listener>
…
</application>
Passo 2 – Definir a regra de navegação
2.1 Regra de navegação no método do managed Bean
import br.gov.framework.demoiselle.view.faces.Navigation;
public class MeuManagedBean {
…
@Navigation(name=”destino_excecao”)
public String acao(){
…
return “destino_fluxo_normal”;
}
…
}
Sendo “destino_excecao” a página de destino em caso de exceção na execução do método
2.2 Regra de navegação na classe de exceção que será gerada
import br.gov.framework.demoiselle.view.faces.Navigation;
@Navigation(name=”destino_excecao”)
public class MinhaExcecao extends RuntimeException {
…
}
Toda exceção gerada do tipo MinhaExcecao será tratada direcionando o JSF para a página definida no @Navigation, “destino_excecao”. Lembrando que a prioridade será sempre da forma definida no item 2.1
Mais informações: https://sourceforge.net/apps/mantisbt/demoiselle/view.php?id=365
- Sincronização das transações durante o ciclo de vida do JSF
Utilizando o DemoiselleActionListenerImpl, conforme demonstrado no tópico anterior, outra funcionalidade estará disponível para o desenvolvedor: A sincronização dos dados em memória no banco de dados.
Colocando o valor true na configuração “refresh” no arquivo de configuração do Demoiselle, o framework, antes de executar o commit das transações no banco de dados fará um flush (sincronização) no intuito de pegar alguma exceção de banco e possibilitar o tratamento desta utilizando o mecanismo descrito no tópico acima.
Exemplo de uso
Passo 1 – Adicionar o action listener no web.xml
<application>
…
<action-listener>br.gov.framework.demoiselle.view.faces.DemoiselleActionListenerImpl</action-listener>
…
</application>
Passo 2 – Configuração do demoiselle.properties
framework.demoiselle.view.faces.refresh=true
Mais informações: https://sourceforge.net/apps/mantisbt/demoiselle/view.php?id=365
Autor: Mario Costa
Curtir isso:
Curtir Carregando...