Passo 3 – A persistência em memória
O pincipal objetivo desse passo não
foi me atentar à persistência, mas sim a criação de serviços
para criar um CRUD, a criação da interface com o usuário e ligar
os serviços com o AngularJS.
Para armazenar os dados, criei uma
interface e uma implementação para o meu DAO em memória para que
fosse administrado pelo Spring. Desse modo, na classe AppConfig,
somente adicionei um método para criar meu DAO. O que preciso fazer
é criar um atributo em alguma classe chamado pessoaDAO do tipo
PessoaDAO e anotar com @Autowired. Ipso facto magico! O Spring vai
injetar essa dependência para você. Segue o código do Bean do
spring na classe AppConfig na listagem abaixo:
@Bean
public PessoaDAO pessoaDAO() {
return new PessoaDAOImpl();
}
A implementação do meu DAO nada mais
é do que a utilização de uma lista parametrizada da classe Pessoa,
com métodos de inserção, deleção, alteração e busca, ou seja
um CRUD.
Não é o ideal, pois quando o servidor
é desligado, todos os dados são descartados. Tudo estará
registrado enquanto o servidor estiver no ar.
Após a criação do DAO, criei as
telas de inclusão, pesquisa e alteração de pessoas. Poderia ter
usado uma tela só para inclusão e alteração, mas queria ter algo
mais didático.
A página de pesquisa possui um campo
para pesquisa por nome ou parte de um nome. Ao acionar o botão de
pesquisa, o script irá verificar se o campo foi preenchido para
chamar serviços diferentes. Se o campo não for preenchido, a
aplicação irá pesquisar por todos os registros, senão pesquisará
aqueles registros que possuem aquela parte do nome.
A figura a seguir exibe a tela de
resultados para uma parte do nome.
Os registros são exibidos nas linhas
da tabela. Cada linha contém o nome com um link para alteração, o
endereço, o telefone e a palavra excluir, que chama o serviço para
exclusão de um registro, transmitindo seu id e ao retornar refaz a
pesquisa. Caso haja algum problema, uma mensagem de erro aparece e os
resultados permanecem inalterados.
A tela de cadastro é simples. Não
existe mistério. A única coisa a se observar é no script quando é
chamado o método POST do objeto $http do AngularJS. O método POST
necessita de um parâmetro adicional, que são os dados do POST. A
listagem abaixo mostra a construção dos parâmetros.
$scope.createPessoa = function
() {
console.log('Calling URL: '
+ $scope.defaultUrl + 'create');
var data = {'nome':
$scope.nome, 'endereco': $scope.endereco, 'telefone': $scope.telefone};
console.log('Data: ' +
data);
$http.post($scope.defaultUrl + 'create', data)
.success(function
(data) {
console.log('[OK]');
$scope.message
= data;
})
.error(function
(data, status) {
console.log('[FAIL]');
$scope.message
= {'result' : data + status};
});
};
Uma variável data é criada a partir
das informações do formulário, que serão transmitidas em formato
JSON.
Essa não é o único lugar que deve
mudar. A interface agora está enviando dados em formato JSON e a
aplicação também deve receber informações em formato JSON. Para
o método create deve-se anotar conforme a listagem abaixo:
@RequestMapping(value = "/create",
method = RequestMethod.POST,
consumes = {"application/json;charset=UTF-8"})
method = RequestMethod.POST,
consumes = {"application/json;charset=UTF-8"})
public @ResponseBody
SimpleResult create(@RequestBody
Pessoa pessoa) {
LOGGER.log(Level.INFO, "Serviço
/create");
service.create(pessoa);
SimpleResult result = new
SimpleResult();
result.setResult("Pessoa
cadastrada com sucesso!");
return result;
}
Duas coisas são importantes de se
ressaltar:
1. consumes =
{"application/json;charset=UTF-8"}
Isso indica que agora nosso método
aceita informações em formato JSON
2. @RequestBody Pessoa pessoa
Isso indica que o objeto deve ser
compatível com os atributos da classe Pessoa. Existindo essa
combinação, não é necessário fazer mais nada.
A imagem a seguir mostra a tela de
cadastro:
Por fim, a tela de alteração. Toda
vez que o usuário clicar no link onde está o nome, será
encaminhado para a tela de alteração levando no parâmetro, o id da
Pessoa. Ao iniciar, o id será pesquisado e populará todos os
campos. O id é um campo hidden que eu deixa à vista para fins
didáticos. No próximo passo vou mostrar que ele pode conter mais do
que imaginamos.
Ao pressionar o botão de alteração,
o mesmo mecanismo para a inserção de registros será executado,
somente mudando o nome do serviço para alteração e não inclusão.
A imagem a seguir mostra a tela de
alteração:
Basicamente o fluxo de trabalho desse
passo é dado pelo diagrama de sequência abaixo. Ao fazer um submit
na página, o controlador Javascript utiliza o recurso $http do
AngularJS que chama um controlador em java, que por sua vez chama um
serviço Java que, por sua vez chama a camada de persitência. A
clássica arquitetura em três camadas.
Para o próximo passo, será utilizado
o banco de dados MongoDB em vez de um banco de dados em memória.
No comments:
Post a Comment
Let me know your opinion