2013-01-09 32 views
2

我讀春天數據綁定這裏的漂亮全面的解釋:https://stackoverflow.com/a/3705855/1828986服務Spring MVC的DataBinder的

我的問題需要多一點知識,我要強調它:

我有一個複雜的領域Person對象 - 例如與街道和號碼字段聯繫。因此,我們可以形容它爲:

public class Contact { 
    private String street; 
    private int number; 
// setters & getters 
}; 
public class Person { 
    private String name; 
    private int age; 
    private Contact contact; 
// setters & getters 
}; 

我認識到,春天代表爲HTML形式,隨後輸入字段:
姓名,年齡,contact.street,contact.number

我假定,它可以在返回時返回到Person對象。

我想「聘請」彈簧活頁夾爲我提供的文本數據(而不是HttpRequest對象)創建對象。 例如我有文件:

name  age  street  number 
John  22   MHDrive  2187 
Will  32   MHDrive  3212 

我可以提供任何結構上面,並希望得到Person對象:)

例如

Person p = springBinderSomething({{"name","John"},{"age","22"},{"street","MHDrive"},{"number","2187"}}, Person.class); 

任何幫助表示讚賞
THX
薩蘭

回答

4

在這種情況下,這聽起來像你想直接使用DataBinder類。你應該能夠實例化一個DataBinder的實例,傳遞你想綁定的對象的實例,然後調用bind(PropertyValues)方法來進行綁定。 Spring MVC通常會爲你實例化一個類的新實例,但如果你直接調用DataBinder,則需要將它傳遞給一個實例化的實例。 ServletRequestDataBinder在幕後創建了一個MutablePropertyValues的實例,它使用請求中的參數值填充,然後傳入#bind(PropertyValues)方法。就你而言,你可能想要自己創建一個新實例,並直接用數據填充它,而不是從請求中填充。如果您有現有對象中的數據,則有許多用於MutablePropertyValues的構造函數,否則您可以使用您的名稱和值調用#add(String, Object)方法。

Person person = new Person(); 
DataBinder dataBinder = new DataBinder(person); 
MutablePropertyValues mpv = new MutablePropertyValues(); 
mpv.add("name", "John Doe"); 
mpv.add("age", 25); 
mpv.add("contact.street", "1st Street"); 
mpv.add("contact.number", 12345); 
dataBinder.bind(mpv); 
+0

作品完美!謝謝。 – Saram

+0

注意到,該驗證程序未被調用。有什麼辦法來應用默認的彈簧驗證器? – Saram

+0

使用DataBinders檢查[Validator文檔](http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/validation.html#validation-binder)以瞭解如何執行驗證在綁定的對象上。 –