Estou criando uma aplicação Web para inscrição de candidatos para um concurso.
No formulário de inscrição, preciso incluir no request objetos que são usados para criar selects, como Estados, Cursos, etc..
Para isso, criei um controler FormularioControler, com o método load abaixo
public void load() {
result.include("estados", estadoDAO.listAll());
result.include("linhasPesquisa", linhaPesquisaDAO.listAll());
result.include("ieses", instituicaoEnsinoDAO.listTodasComCursos());
result.include("orientadores", orientadorDAO.listAll());
}
criei também um jsp, chamado load.jsp, conforme o padrão de nomenclatura do VRaptor.
No action do form, é disparada uma ação do controller, que valida os dados de inscrição. Em caso de um erro, como o nome do usuário seja vazio, eu gostaria de redirecionar para o formulário de inscrição, com mensagens de erro, mas sem perder os dados já digitados pelo usuário. Acho que algo normal, e pela documentação do VRaptor, isso parece se algo já contemplado pelo FW. Então eu fiz o seguinte?
public void save(Candidato candidato){
if ((candidato.getCpf() == null) || (candidato.getCpf().isEmpty())){
validator.add(new ValidationMessage("nome.invalido", "erro"));
}
if (!Utilities.isCPF(candidato.getCpf())){
validator.add(new ValidationMessage("cpf.invalido", "erro"));
}
result.include("candidato", candidato);
validator.onErrorUsePageOf(FormularioController.class).load();
this.candidatoDAO.save(candidato);
}
Na minha lógica, em caso de algum erro, o método load recarregaria também os valores dos selects, mas isso não está acontecendo. Ele traz os dados do candidato, mas os selects ficam vazios. Alguma dica do que eu estou fazendo errado?
Eu já testei uma solução que funciona, que seria colocar o trecho de código antes do redirecionamento em caso de erro:result.include("estados", estadoDAO.listAll());
result.include("linhasPesquisa", linhaPesquisaDAO.listAll());
result.include("ieses", instituicaoEnsinoDAO.listTodasComCursos());
result.include("orientadores", orientadorDAO.listAll());
Porém, não acho que este seja a solução correta, por replicar o código.