2013-06-24 51 views
0

我想在控制器中執行依賴注入,而不是使用setter方法,但它沒有工作。當使用控制器完成數據表單的發佈時,目的是將表單輸入與我的領域模型的屬性綁定。在POST中使用Spring MVC查看模型的視圖3

我想要什麼:只需使用springframework 3.1將控件類中的域模型與我的窗體綁定即可。

我的域類:

public class Person { 

    private String name; 

    @Autowired 
    public Person(String name) { 
    this.name = name; 
    } 

    public String getName() { 
    return this.name; 
    } 

} 

我的JSP(人次獲得):

<form action="test-person" method="post"> 
<table cellpadding="0" cellspacing="0" align="center"> 
    <tr> 
     <td> <b> NAME: </b> </td> 
     <td> <input type="text" id="name" name="name"> </td> 
    </tr> 
</table> 
</form> 

我的控制器:

@Controller 
public class PersonController { 

@RequestMapping(value = "test-person", method = RequestMethod.GET) 
public String loadViewGet() {  
    return "person-get"; 
} 

@RequestMapping(value = "test-person", method = RequestMethod.POST) 
public String doPost(Person person, Model model) { 

    model.addAttribute("person", person); 

    return "person-post"; 
    } 

} 

,並顯示的輸入名字的最後一個JSP人(用戶):

<table cellpadding="0" cellspacing="0" align="center"> 
<tr> 
    <td> <b> NAME: </b> </td> 
    <td> ${person.name} </td> 
</tr> 
</table> 

有一種方法可以將表單輸入與我的模型類(Person)綁定,而無需使用setter方法?

任何人都知道另一個可以做到這一點的Java Web框架?

謝謝!

+0

「改爲使用setters方法,但它沒有工作」它是如何工作的? – Raedwald

+0

引發一個異常,說明該屬性不存在。 Spring MVC在setter方法中使用反射來做到這一點。我想知道是否有另一種方式 - 不使用setter方法 - 做到這一點。謝謝! –

+0

現在,我看到這個問題只是您以前的問題的副本http://stackoverflow.com/questions/17220310/constructor-dependency-injection-in-spring-mvc-3。 –

回答

0

@Autowired註釋和依賴注入支持由應用程序上下文的bean工廠(bean在應用程序上下文XML或@Configuration beans中定義)創建的bean。

MVC的域模型對象是在處理程序參數解析程序的請求數據綁定過程中創建的(而不是由應用程序上下文)創建的。自動裝配和其他DI功能不受支持。您的必須爲您的域模型對象提供用戶屬性訪問器(獲取器和設置器)。

+0

我必須?那麼,那是唯一的方法呢? –

+0

而DDD?我需要有貧血的對象,因爲Spring MVC以這種方式工作?如果沒有選擇,我會找到另一個不會迫使我這樣做的框架 - 使用FIELD反射代替方法反射。我自己也在構建一個小框架,讓我們看看會是什麼。解釋非常感謝! –

+0

Spring是高度可定製的......可隨意編寫自己的'HandlerMethodArgumentResolver'。那麼你將需要自己做綁定。僅僅是因爲Spring的數據綁定基於屬性訪問器? –