Olá Lilian,
primeiro com relação a dúvida que você levantou com os links. Nesse momento do curso com o Spring, paramos de acessar diretamente a jsp.
Por exemplo, para acessa o formulário de cadastro você acessou o link http://localhost:8080/projetocuidandodaatencao/projeto/CadastroAluno. O que aconteceu é que o Spring, a partir desse link, procurou um Controller cujo mapeamento é projeto/CadastraAluno
. Agora olha como está o controller que você mandou na mensagem anterior:
@RequestMapping("projeto")
@Controller
public class AlunoController {
@Autowired /* spring ejetar o DAO */
private AlunoDAO alunoDAO;
@RequestMapping("CadastroAluno")
public ModelAndView form(){
ModelAndView modelAndView = new ModelAndView("projeto/CadastroAluno");
return modelAndView;
}
}
A sua classe está com um mapeamento (RequestMapping) para o endereço projeto
, enquanto o método form está mapeado para CadastraAluno
. Ou seja, quando o usuário digita o endereço projeto/CadastraAluno
no navegador, o Spring na verdade está executando o método form
do AlunoController
. Neste método, você definiu um objeto ModelAndView
para o "projeto/CadastroAluno"
e retorna este objeto. Este ModelAndView
é que define qual a jsp que será devolvida para o navegador do usuário.
Então quando digitamos a url no navegador, passamos o endereço de um método do Controller que queremos acessar. Esse método que se encarrega de executar a lógica e dizer qual a jsp que será usada.
Analogamente, esta é a razão do porque você não consegue acessar a listagem por http://localhost:8080/projetocuidandodaatencao/projeto/ListaDeAlunos. O Spring no fundo estaria procurando por um método do Controller mapeado para o endereço projeto/ListaDeAlunos
e não pela ListaDeAlunos.jsp direto. Só que no controller está assim:
@RequestMapping("projeto")
@Controller
public class AlunoController {
@RequestMapping(method=RequestMethod.GET)
public ModelAndView listar() {
List<Aluno> alunos = alunoDAO.listar();
ModelAndView modelAndView = new ModelAndView("projeto/ListaDeAlunos");
modelAndView.addObject("alunos", alunos);
return modelAndView;
}
}
Sua classe está mapeada para projeto
e seu método listar
está apenas definido para o tipo GET
, sem nenhuma url. Ou seja, o método listar é executando quando o usuário acessa o endereço /projeto
no tipo de requisição GET
. Isto é justamente o que acontece quando você digita no navegador o link http://localhost:8080/projetocuidandodaatencao/projeto. Ai sim, dentro do método listar foi definido o ModelAndView
para a jsp ListaDeAlunos
.
Por fim, o motivo de talvez não estar funcionando o cadastro. O Controller para esta etapa está assim:
@RequestMapping("projeto")
@Controller
public class AlunoController {
@RequestMapping(method=RequestMethod.POST)
public String gravar(Aluno aluno, RedirectAttributes redirectAttributes) {
alunoDAO.gravar(aluno);
redirectAttributes.addFlashAttribute("sucesso", "Produto cadastrado com sucesso!");
return("redirect:projeto");
}
}
Assim a classe está mapeada para o endereço projeto
e o método gravar
para o tipo de requisição POST
. Ou seja, este método será executado apenas quando acessamos a url /projeto
no tipo POST
. A sua tag <form>
na jsp de cadastro está com a action
apontando para este endereço projeto
e tem como method
definido para POST
?