Introdução
Nesse post vou mostrar algumas maneiras de interceptar os ações nas Actions (lista e dados). Não são necessariamente eventos, são implementações de métodos informando via anotação o momento que serão chamados, causando o mesmo efeito de um evento.
Vamos começar pelo action de lista, uma vez que a action de lista que faz a chamada a tela de dados.
@JArchCrudListBeforeCallInsert
Essa anotação deve ser usada em um método da action de lista. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento que for clicado no botão incluir da tela de lista.
Segue um exemplo abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @JArchViewScoped public class ListaBancoAction extends CrudListAction<BancoEntity, BancoFacade> { @Inject private UserInformation userInformation; @Override public String getPageData() { return "dadosBanco.jsf"; } @JArchCrudListBeforeCallInsert public void antesInclusao() { if (!userInformation.get(UsuarioEntity.class).isMaster()) { throw new ValidationException(BundleUtils.messageBundle("message.permissaoNegadaParaEssePerfil")); } } } |
Observe que a assinatura desse método não recebe nenhum parâmetro. Desse tipo de evento somente esse método não recebe a entidade por parâmetro.
@JArchCrudListBeforeCallChange
Essa anotação deve ser usada em um método da action de lista. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento que for clicado no botão alterar da tela de lista.
Segue um exemplo abaixo:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @JArchViewScoped public class ListaBancoAction extends CrudListAction<BancoEntity, BancoFacade> { @Inject private UserInformation userInformation; @Override public String getPageData() { return "dadosBanco.jsf"; } @JArchCrudListBeforeCallChange public void antesAlteracao(BancoEntity banco) { if (!userInformation.get(UsuarioEntity.class).isMaster()) { throw new ValidationException(BundleUtils.messageBundle("message.permissaoNegadaParaEssePerfil")); } } } |
Observe que a assinatura desse método recebe a entidade por parâmetro. Com exceção do @ArchCrudListBeforeCallInsert todos os demais recebem ese mesmo parâmetro.
@JArchCrudListBeforeCallClone
Essa anotação deve ser usada em um método da action de lista. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento que for clicado no botão clonar da tela de lista.
Segue um exemplo abaixo:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @JArchViewScoped public class ListaBancoAction extends CrudListAction<BancoEntity, BancoFacade> { @Inject private UserInformation userInformation; @Override public String getPageData(BancoEntity banco) { return "dadosBanco.jsf"; } @JArchCrudListBeforeCallClone public void antesClonagem() { if (!userInformation.get(UsuarioEntity.class).isMaster()) { throw new ValidationException(BundleUtils.messageBundle("message.permissaoNegadaParaEssePerfil")); } } } |
@JArchCrudListBeforeCallConsult
Essa anotação deve ser usada em um método da action de lista. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento que for clicado no botão consultar da tela de lista.
Segue um exemplo abaixo:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @JArchViewScoped public class ListaBancoAction extends CrudListAction<BancoEntity, BancoFacade> { @Inject private UserInformation userInformation; @Override public String getPageData() { return "dadosBanco.jsf"; } @JArchCrudListBeforeCallConsult public void antesConsultar(BancoEntity banco) { if (!userInformation.get(UsuarioEntity.class).isMaster()) { throw new ValidationException(BundleUtils.messageBundle("message.permissaoNegadaParaEssePerfil")); } } } |
@JArchCrudListBeforeCallDelete
Essa anotação deve ser usada em um método da action de lista. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento que for clicado no botão excluir da tela de lista.
Segue um exemplo abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | @JArchViewScoped public class ListaBancoAction extends CrudListAction<BancoEntity, BancoFacade> { @Inject private UserInformation userInformation; @Override public String getPageData() { return "dadosBanco.jsf"; } @JArchCrudListBeforeCallDelete public void antesExcluir(BancoEntity banco) { if (!userInformation.get(UsuarioEntity.class).isMaster()) { throw new ValidationException(BundleUtils.messageBundle("message.permissaoNegadaParaEssePerfil")); } } } |
Agora veremos os eventos que podem ser implementados na action de dados.
@JArchCrudDataStartEnviromentInsert
Essa anotação deve ser usada em um método da action de dados. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento da abertura da tela de dados. Ele é disparado quando acionado a ação de incluir na tela de lista.
Segue um exemplo abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @JArchViewScoped public class DadosBancoAction extends CrudDataAction<BancoEntity, BancoFacade> { @Override public String getPageList() { return "listaBanco.jsf"; } @JArchCrudDataStartEnviromentInsert public void iniciaModoInclusao() { getEntity().setCodigo("XXX"); getEntity().setCodigo("Entre com o nome do banco"); } } |
@JArchCrudDataStartEnviromentClone
Essa anotação deve ser usada em um método da action de dados. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento da abertura da tela de dados. Ele é disparado quando acionado a ação de clonar na tela de lista.
Segue um exemplo abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | @JArchViewScoped public class DadosBancoAction extends CrudDataAction<BancoEntity, BancoFacade> { @Override public String getPageList() { return "listaBanco.jsf"; } @JArchCrudDataStartEnviromentClone public void iniciaModoClonagem() { getEntity().setCodigo("CLONE"); getEntity().setNome("Nome do banco clonado"); } } |
@JArchCrudDataStartEnviromentChange
Essa anotação deve ser usada em um método da action de dados. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento da abertura da tela de dados. Ele é disparado quando acionado a ação de alterar na tela de lista.
Segue um exemplo abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 | @ArchViewScoped public class DadosBancoAction extends CrudDataAction<BancoEntity, BancoFacade> { @Override public String getPageList() { return "listaBanco.jsf"; } @JArchCrudDataStartEnviromentChange public void iniciaModoAlteracao() { // Carregar componentes visuais para visualização } } |
@JArchCrudDataStartEnviromentConsult
Essa anotação deve ser usada em um método da action de dados. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento da abertura da tela de dados. Ele é disparado quando acionado a ação de consultar na tela de lista.
Segue um exemplo abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 | @JArchViewScoped public class DadosBancoAction extends CrudDataAction<BancoEntity, BancoFacade> { @Override public String getPageList() { return "listaBanco.jsf"; } @JArchCrudDataStartEnviromentConsult public void iniciaModoConsulta() { // Carregar componentes visuais para visualização } } |
@JArchCrudDataStartEnviromentDelete
Essa anotação deve ser usada em um método da action de dados. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento da abertura da tela de dados. Ele é disparado quando acionado a ação de excluir na tela de lista.
Segue um exemplo abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 | @JArchViewScoped public class DadosBancoAction extends CrudDataAction<BancoEntity, BancoFacade> { @Override public String getPageList() { return "listaBanco.jsf"; } @JArchCrudDataStartEnviromentDelete public void iniciaModoExclusao() { // Carregar componentes visuais para visualização } } |
Existe mais dois eventos que podem ser interceptados, mas que são em um outro momento dentro da tela dados.
@JArchCrudDataBeforeSave
Essa anotação deve ser usada em um método da action de dados. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento do click de confirmação na tela de dados mas antes de efetivar a gravação dos dados.
Segue um exemplo abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 | @JArchViewScoped public class DadosBancoAction extends CrudDataAction<BancoEntity, BancoFacade> { @Override public String getPageList() { return "listaBanco.jsf"; } @JArchCrudDataBeforeSave public void antesSalvar() { // Ajusta dados conforme seleção dos componentes visuais } } |
@JArchCrudDataAfterSave
Essa anotação deve ser usada em um método da action de dados. Essa anotação é uma variação da implementação do design pattern Template Method, só que com a flexibilidade de definir o nome método. Esse método anotado passa a ser um Hook Méthod e é chamado no momento do click de confirmação na tela de dados mas após a efetivar a gravação dos dados.
Segue um exemplo abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 | @JArchViewScoped public class DadosBancoAction extends CrudDataAction<BancoEntity, BancoFacade> { @Override public String getPageList() { return "listaBanco.jsf"; } @ArchCrudDataAfterSave public void depoisSalvar() { // Ajusta dados conforme seleção dos componentes visuais } } |
Conclusão
Finalizamos os posts relacionados a eventos, conforme visto nos posts anteriores existem diversos tipos de eventos no framework. Esses eventos são de grande importância para manter o código com baixo acoplamento e coeso.
Até mais,
Nenhum comentário:
Postar um comentário