2011-03-22 31 views
0

我想使用@ModelAttribute的自動裝配魔法來獲取和傳遞參考數據。這樣做的問題是任何添加到@ModelAttribute模型的任何東西都被認爲是表單支持對象,然後綁定到請求,可能會修改對象。將@ModelAttribute用作參考數據 - 避免綁定

我只是希望它們添加到模型中以供視圖參考,並且能夠使用參數級別@ModelAttribute將對象連接到用@RequestMapping註釋的方法。有沒有辦法做到這一點,沒有一些詳細的@InitBinder方法?

例如:

@ModelAttribute("owner") 
public Person getOwner(@PathVariable("ownerId") Integer ownerId){ 
    return getOwnerFromDatabaseById(ownerId); 
} 

@RequestMapping("/{ownerId}/addPet.do") 
public ModelAndView addPet(HttpServletRequest request, @ModelAttribute("owner") Person owner){ 
    String name = ServletRequestUtils.getStringParameter(request, "name"); 
    Pet pet = new Pet(); 
    pet.setName(name); 
    pet.setOwner(owner); 
    saveToDatabase(pet); 
} 

其中的寵物被添加到所有者甲簡單的例子。我希望將所有者放置在模型中供視圖使用,並且我還想使用自動裝配參數addPet()中的參數。假設PetPerson都有一個成員name。在這種情況下,owner會自動綁定到該請求,並將其name設置爲該寵物的名稱。這怎麼可以避免?

+1

你是什麼意思「假定是一個窗體支持對象」?任何不良行爲的例子? – axtavt 2011-03-22 09:08:16

回答

0

我認爲你做錯了,在這種情況下@ModelAttribute應該是Pet--這就是應該用作表單支持對象的東西。爲了讓owner根據ownerId自動填充,您可以爲Owner類註冊一個屬性編輯器,該類將擁有getOwner方法中當前擁有的邏輯。

+0

是的,我可能只需要做一些完全不同的事情。 – Keith 2011-03-25 19:01:17