2013-01-06 71 views
1

我一直在閱讀這個論壇很長一段時間,發現它非常有用,感謝貢獻者。我有一個問題已經讓我困擾了好幾個星期。這就是它。Java Spring @ModelAttribute方法模型名稱

 @RequestMapping(value="updateNote.htm",method=RequestMethod.POST) 
    public String updateNote(@ModelAttribute("note")NoteBean nb, BindingResult res,Model model){ 
     daoobj.updateNote(nb.getName(),nb.getPath(), nb.getNote()); 

     model.addAttribute("note",daoobj.getByName(nb.getName())); 
     return("success"); 
} 

    @RequestMapping(value="updateNote.htm",method=RequestMethod.GET) 
    public String updateNote(@ModelAttribute("note")NoteBean nb,Model model){ 
     populateNoteBean(); 
     model.addAttribute("note",daoobj.getByName(nb.getName())); 
     return("editNote"); 
} 

@ModelAttribute("WHAT") 
    public NoteBean populateNoteBean() { 
    NoteBean nnb = new NoteBean(); 
    return nnb; 
    } 

使用populateNoteBean()方法,模型屬性爲「WHAT」。但是,我用的名字是「筆記」。所以當我運行代碼時,NoteBean被正確地保存到數據庫中。我的問題是如何?看起來名稱「什麼」應該是「註釋」,或者模型屬性將它保存爲無名稱。

謝謝你的時間。

+0

該方法有什麼作用? – shazinltc

+0

這個程序是一個簡單的基於網絡的筆記記錄程序。方法populateNoteBean將NoteBean放入模型中。另外兩種方法是更新/修改數據庫中的記錄。 – clark

回答

1

使用您當前的代碼,您將在模型中擁有兩個notebean實例!

第一個spring調用控制器中的所有modelattribute註釋方法,並將結果放入模型中。其次它評估你的請求映射方法中的那些。

modelattribute帶註釋的方法的一點是您可以選擇如何創建您的bean。例如從數據庫加載它。

我們使用這種方法類似:

  • modelattr方法(名稱= 「注意」)

負載從數據庫

  • requestmapping方法豆modelattr參數(名稱= 「note」)

合併註釋例如,第一個方法創建的bean與提交請求參數一起創建,並且您可以直接訪問修改過的bean。

一個很好的效果: 我們不希望隱藏表單中所有屬性的隱藏輸入字段,只是爲了能夠將實體與entitymanager合併。這樣你就可以擁有一個只有一個屬性的表單(加上一個可以獲取實體的id)

或者另外一個: 如果你的註釋bean是一個抽象類,Spring就不可能實例化bean因爲它不知道什麼是instanciate。例如,您可以在modelattr註釋的方法中添加一個requestparam參數,並決定要做什麼。

這在文檔中有很好的描述。無論是控制器,reqestmapping或modelattribute的引用或api中,我相信。

+0

哦,我只是從method = RequestMethod.GET中取出了填充的NoteBean,它工作。我現在看到,我所需要的只是在方法參數中使用它,因爲它從視圖中選擇了這些信息。非常感謝! PS它不會讓我投票你的答案! – clark

+0

我認爲這取決於你在這裏的經驗值。只要接受答案。很高興我能幫忙。 –