2013-06-03 87 views
6

我有我的用戶對象,我試圖用彈簧MVC綁定到UI。用戶對象在其中具有另一個對象地址。Spring MVC:將複雜對象綁定到UI

public class User { 
    String firstName; 
    String lastName; 
    String userName; 
    Address address; 
} 

地址obj。

public class Address { 
    String street; 
    String House; 
    String country; 
} 

當我將用戶對象綁定到UI說編輯用戶功能我只想保留firstName和lastName。

現在我的第一個問題是,如果我不保留用戶的其他屬性作爲隱藏字段我將這些值爲空。這意味着用戶界面上的綁定對象是用戶對象的新實例。我不能在同一個用戶對象上工作,並將它綁定到用戶界面上,只獲取具有舊值的更新值?

其次:由隱藏字段的方法我沒有得到地址對象回來了,我該

<form:hidden path="user.address" /> 

得到空當用戶是我的模態屬性。

我不知道,我對Spring MVC的理解可能存在差距。對於在UI上綁定對象,我們總是需要創建新的實例?如果嵌套,我們如何將嵌套對象(地址)返回到綁定模態屬性中?

一旦選項我猜是使用粘合劑。但據我所知,活頁夾也將使用id獲取對象??請給出解決方法,我可以救我的查詢來獲取該對象返回

回答

10

爲了讓您的Address對象返回,您將需要列出每一個單獨的屬性:爲前:

<form:hidden path="user.address.street" /> 
<form:hidden path="user.address.country" /> 

等上。

現在,您綁定到UI的對象是您從控制器傳遞的對象。我假設當提交表單時,您想要將User對象恢復爲@ModelAttribute。在這種情況下,您有兩種選擇:第一種是您需要在客戶端列出您的User對象的所有屬性(作爲隱藏對象或可見表單元素)。

第二個選項是:您只在客戶端顯示所需的屬性,而不是將所有其他propeties列爲隱藏字段,而只將User實例的id作爲隱藏字段保留。現在,當您在表單提交時收到此@ModelAttribute後,可以使用id從數據庫加載整個對象,並在調用update之前在其上設置更新的屬性。

爲前:

@RequestMapping("updateUser.do") 
public String updateUser(@ModelAttribute User user, ... /* rest of the args */) { 
    // ... some other code 
    User existingUser = userService.findById(user.getId()); 
    existingUser.setFirstName(user.getFirstName()); 
    existingUser.setLasstName(user.getLastName()); 

    userService.update(existingUser); 
    // ... rest of the code 
} 

沒有辦法,你只能對客戶端所需要的屬性配合,並與同現有的對象合併。

+1

多數民衆贊成在我想避免..在這裏我不得不再次擊中數據庫來獲得對應的對象的價值 – dhroove

+0

這些是你有的唯一的兩個選項。 –