2012-04-13 60 views
2

我正在使用Spring MVC測試應用程序。 我有一個Person類和Group類。每個Person對象都引用一個Group對象。在Spring MVC中綁定的對象

現在我實現了一個顯示Person數據並允許編輯的jsp。在我的形式,我把一個選擇器選擇皮爾遜組:

<sf:select path="group"> 
    <sf:options items="${groupList}" itemLabel="name" itemValue="id" /> 
</sf:select> 

這說明,當我加載頁面的正確的組,但我不能保存更改,因爲在控制器中我只得到代表該組的字符串id

所以,我的問題是:我如何獲得一個Group對象而不是它的ID在我的控制器?

UPDATE 這裏我控制器代碼:

@RequestMapping(value = "/details", params = "save", method = RequestMethod.POST) 
public String save(@ModelAttribute("person") Person p, 
     BindingResult result) { 
    this.personManager.savePerson(p); 
    return "redirect:/people/details?id=" + p.getId(); 
} 

回答

6

創建自己的GroupEditor延長PropertyEditorSupport(將填充組對象實例correcty)。然後綁定在你的控制器:

@InitBinder 
protected void initBinder(WebDataBinder binder)  { 
     binder.registerCustomEditor(Group.class, new GroupEditor(groupService)); 
} 

和實際的編輯可能看起來somethign像這樣:

public class GroupEditor extends PropertyEditorSupport{ 

    private final GroupService groupService; 

    public GroupEditor(GroupService groupService){ 
     this.groupService= groupService; 
    } 

    @Override 
    public void setAsText(String text) throws IllegalArgumentException { 
     Group group = groupService.getById(Integer.parseInt(text)); 
     setValue(group); 
    } 
} 

Spring docs

+0

我更新了我的問題... – davioooh 2012-04-13 09:59:09

+0

我有什麼改變我的方法簽名?我必須改變這種方式 '公共字符串保存(@ModelAttribute(「人」)人p,組g,BindingResult結果)'? – davioooh 2012-04-13 10:09:24

+0

如果它與您原來的問題相同,則沒有任何結果。綁定結果只有在您驗證它時才需要... – NimChimpsky 2012-04-13 10:09:57