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,