Oi Bruno,
Desse jeito está correto.
Esse é o jeito mais comum que o pessoal utiliza nos projetos, mas realmente essa questão da classe de modelo ir para a tela leva a algumas discussões...
O problema é que a View fica acoplada com o Model, e isso pode levar a problemas de manutenção no código. O ideal seria ter 2 classes a mais, uma que representa os dados que chegam do formulário e outra que representa as informações que vão para a tela. Algo como:
public class CadastroConvidadoForm {
private String nome;
private String email;
private String telefone;
//metodos setters
public Convidado toConvidado() {
return new Convidado(this.nome, this.email, this.telefone);
}
}
public class ListaConvidadosView {
private List<Convidado> convidados;
public ListaConvidadosView(List<Convidado> convidados) {
this.convidados = convidados;
}
//getters e outros metodos que a tela precise...
}
@RequestMapping(value = "salvar", method = RequestMethod.POST )
public String salvar(@Valid @ModelAttribute CadastroConvidadoForm form , Model model) {
Convidado novo = form.toConvidado();
service.salvar(novo);
new EmailService().enviar(novo.getNome(), novo.getEmail());
Iterable<Convidado> convidados = service.obterTodos();
model.addAttribute("convidados", new ListaConvidadosView(convidados));
return "listaconvidados";
}
O problema é que você precisa escrever mais código, porém essa abordagem favorece bastante a manutenção e desacoplamento de código.
Recentemente o Alberto Souza, um dos instrutores aqui na Alura, escreveu um post no blog dele discutindo sobre o assunto. Dá uma lida: https://domineospring.wordpress.com/2018/04/23/sera-que-o-struts-1-estava-certo