Componente para mensagens no VRaptor

Boa noite a todos,

Em todos os sistemas que desenvolvemos, quase sempre é necessário ficar apresentando mensagens ao usuário, hora seja nos cadastrados, consultas, erros do sistema, etc., mas sempre temos que apresentar uma mensagem para ele. Como desenvolvemos utilizando HTML com JSP e afins, geralmente colocamos uma tag para imprimir uma mensagem que incluímos através do VRaptor dentro da lógica/página.

Estou desenvolvendo a estrutura para um novo projeto WEB aqui onde trabalho e prevendo isto resolvi fazer o uso do esquema de componentes e injeção de dependência que o VRaptor proporciona para criar um componente que me apresenta as mensagens que eu vou incluindo na aplicação.

Desda forma o que eu basicamente fiz vou criar uma classe que representa a mensagem propriamente dita:

É uma classe normal, sem muita coisa, apenas implementa a interface java.io.Serializable.

O passo agora é termos uma classe que controla o acesso a essa, as mensagens na fila, adicionar e remover mensagens, no caso do nosso exemplo aqui é a classe MessageComponent.

Esta classe implementa a interface java.io.Serializable embora não precisando implementar, apenas convenção e está anotada com as anotações @SessionScoped e @Component. Isto diz para o VRaptor que a mesma é um componente e tem o escopo de sessão dentro da aplicação.

É uma classe simples assim como a outra que eu apresentei, basicamente ela tem um atributo List do tipo SystemMessage e um método void que adiciona objetos a esse List. Agora vem a sacada de tudo isso, para os meus controladores, eu criei uma super-classe que define o comportamento padrão e algumas funcionalidades comuns para todos os controladores da aplicação. Usando encapsulamento e injeção de dependência eu passo a classe MessageComponent e dentro do próprio construtor padrão da super classe eu mando incluir as mensagens nas lógicas. Assim tenho a classe abstrata ApplicationController, mãe dos controladores da minha aplicação, aqui em versão resumida:

Acima, sendo chamado de forma direta no construtor default da super classe, o método de inclusão de todas as mensagens que eu adicionei na execução da aplicação Java que agora basta ser apresentada nas views respectivas. Logo eu fiz um esquema de templates que em apenas um local do HTML/JSP eu faço a respectiva impressão das mensagens armazenadas.

Eis o código HTML/JSP necessário para imprimir as mensagens que incluímos através do VRaptor. Os códigos neste tutorial estão bem resumidos, mas o conceito todo é fácil de ser entendido.

Vou disponibilizar o código fonte para download e em breve eu posto aqui.

Qualquer dúvida comenta aí :)

private List<SystemMessage> systemMessages;public MessageComponent()
{
super();
this.systemMessages = new ArrayList<SystemMessage>();
}public void clearStoredMessage ()
{
this.systemMessages.clear();
}public void storeSystemMessage (String titulo, String conteudo, String tipo)
{
SystemMessage s = new SystemMessage    (); 

s.setConteudoMensagem    (conteudo);
s.setTituloMensagem        (titulo);
s.setTipo                (tipo);

this.systemMessages.add    (s);
}

Blog Java
  • Fabiano

    Excelent! Congratulations man!