フォーム処理のためにコントローラーにこれらのメソッドを持つアプリケーションを構築しています。
//This will prepare the model and populate the form
@RequestMapping(value="verbete",method = RequestMethod.GET, params="new")
public String addVerbete(@ModelAttribute("verbeteform") VerbeteForm verbeteForm,
Map<String, Object> model){
verbeteForm.getNomes().add(new NomesVerbete());
// add one significado
verbeteForm.getSignificados().add(new SignificadosVerbete());
// depois de implementar o Security
verbeteForm.getVerbete().setAutor(usuarioService.buscarUsuarioPorLogin("greati"));
// seta a data
verbeteForm.getVerbete().setDataLancamento(new Date());
// popula categorias
verbeteForm.setCategorias(verbeteService.listarCategorias());
return "editorVerbete";
}
@RequestMapping(value="verbete", params="new", method = RequestMethod.POST)
public String addVerbeteFromForm(@ModelAttribute("verbeteform") VerbeteForm verbeteForm,
Map<String, Object> model){
Verbete verbete = verbeteForm.getVerbete();
List<NomesVerbete> nomes = verbeteForm.getNomes();
List<SignificadosVerbete> significados = verbeteForm.getSignificados();
long idVerbeteSalvo = verbeteService.addVerbete(verbete);
Verbete verbeteSalvo = verbeteService.getVerbetePorId(idVerbeteSalvo);
for(NomesVerbete nome:nomes){
nome.setVerbete(verbeteSalvo);
verbeteService.addNomesVerbete(nome);
}
for(SignificadosVerbete significado:significados){
significado.setVerbete(verbeteSalvo);
significado.setCategoria(verbeteService.getCategoriaPorNome(significado.getCategoria().getNome()));
verbeteService.addSignificadosVerbete(significado);
}
return "editorVerbete";
}
したがって、日付と作成者がモデルに設定されることを期待していましたが、フォームを送信すると、属性dataLancamento
(日付)autor
がモデルにないことが示され、モデルにないためエラーがスローされます。データベースではヌル。
仕組みを理解していなかった@ModelAttribute
のかもしれませんし、何か間違ったことをしているのかもしれません。
dataLancamento
解決策は、2 番目の方法でandを設定することautor
ですが、それが正しいかどうかはわかりません。それで、道を教えてもらえますか?
(ポルトガル語の単語がいくつかあります... 問題があれば教えてください。)