我正在构建一个应用程序,该应用程序在Controller中具有用于表单处理的这些方法:
//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和autor,但我不知道它是否正确。那么,你能告诉我一条路吗?
(有些单词是葡萄牙语...如果有问题,请告诉我。)
发布于 2013-07-05 22:30:37
当执行第一个方法并且第一次呈现表单时,autor应该在模型中。因此,使用${verbeteform.autor}应该会打印autor字段。
但是当您提交表单时,模型中已完全填充了表单中的数据。因此,如果表单没有类似下面这样的autor字段:
<form:form modelAttribute="verbeteform" method="POST">
<form:input path="autor"/>
</form:form>该值不会添加到模型中,因此在第二个控制器中,由于重新生成了模型,因此在autor字段中有一个空值。
https://stackoverflow.com/questions/17489919
复制相似问题