0

我正在构建一个应用程序,该应用程序在控制器中具有这些方法以进行表单处理:

//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工作,或者我做错了什么。

解决方案将在第二种方法中设置dataLancamentoand autor,但我不知道它是否正确。那么,你能给我一个方法吗?

(有些词是葡萄牙语……如果有问题,请告诉我。)

4

1 回答 1

0

当执行第一个方法并第一次呈现表单时,autor 应该在模型中。所以使用 ${verbeteform.autor} 应该打印 autor 字段。

但是当您提交表单时,模型会充满表单中的数据。因此,如果表单没有自动字段,例如:

<form:form modelAttribute="verbeteform" method="POST">
<form:input path="autor"/>
</form:form>

该值未添加到模型中,因此在第二个控制器中,您在 autor 字段中有一个空值,因为模型已重新生成。

于 2013-07-05T14:30:37.273 回答