2013-07-05 25 views
0

我的建築,在這些控制方式,一種表單處理應用程序:@ModelAttribute正在恢復一些錯誤

//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的作品,或者我做錯了什麼。

在第二種方法中將解決方案設置爲dataLancamentoautor,但我不知道它是否正確。那麼,你能告訴我一個方法嗎?

(有些話是在葡萄牙...請告訴我,如果這是一個問題。)

回答

0

當第一種方法是執行和形式呈現的第一次,作者日期應該是在模型中。所以使用$ {verbeteform.autor}應該打印autor字段。

但是,當您提交表單時,表單中的數據填滿了模型。因此,如果形式可是沒有一個作者日期字段,如:

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

值不會添加到模型中,因此在第二個控制器,你必須在作者日期字段爲空值,因爲模型再生。

+0

嗯,有趣。所以,爲了更新一個對象,如果我有一個像user/edit?id = 32的路徑,當我提交表單時,我需要在控制器中使用這個參數(id)來獲取對象並設置我想要更新的屬性,對吧? – vitorgreati

+0

如果你想更新一些東西,最好是(這是我的意見)把它放在表單中。如果您不希望某個特定字段出現在表單中,則可以使用表單:隱藏標記。 – ftrujillo