2011-05-31 45 views
0

我正在使用我正在開發的項目,用戶可以選擇以新的表單提交開始,還是繼續之前啓動的表單提交。我正在使用@ModelAttribute表示法爲新表單提交生成新對象。這很棒。現在我試圖從數據庫中獲取信息,根據給定的ID預先在對象中填充信息,並且遇到了一些問題。我試圖使用@RequestParam獲取使用表單提交傳入的id,但id正在返回null。我可以看到,該id是作爲請求字符串的一部分發送的,但它不會將其發送到@ModelAttribute方法。這是我到目前爲止。在@ModelAttribute方法中訪問時,@RequestParam爲null

形式提交到發送的RegID,這樣的形式可以預先填充

<form id="preregistration" action="/Homepage/Pre-Registration" method="post"> 
<input type="text" name="view" id="view" value="preprocess"/> 
<select name="regId" id="regId"> 
    <option value="0">Select</option> 
    <option value="1234">1234</option> 
    <option value="4567">4567</option> 
</select> 
<input type="submit" name="submit" id="submit" value="Submit"/> 
</form>  

模型屬性方法

@ModelAttribute("event") 
public Event createDefaultEvent(@RequestParam(required = false) Integer regId){ 
    log.debug("regId: {}", regId); 
    if (regId == null){ 
     log.debug("make new event object"); 
     return new Event(); 
    } else { 
     log.debug("retrieve event with id: {}", regId); 
     return eventDao.get(regId); 
    } 
}  

請求映射方法

@RequestMapping(params = "view=preprocess") 
public String getPreProcessInformation(@ModelAttribute("event") Event event) 
    throws Exception{ 
     return "redirect:/preregistration.do?"+Page.EVENT.getView(); 
} 

誰能幫助我當我提交表單時,爲什麼我的regId在@ModelAttruibute方法中爲空?提前致謝!

+0

這是什麼框架? – 2011-06-01 00:05:58

回答

3

你需要告訴它你要讀帕拉姆的名稱是:

@RequestParam(value="regId", required = false) 

這方法參數的名稱是不是在運行時通過反射的可用。 Spring不能確定你在java代碼中命名了你的參數'regId',你需要這麼說。

編輯:

也有一些更多的學術散漫,的ModelAttribute方法最適合用於提供固定在你正在構建的視圖的範圍參考數據。您打算將表單字段綁定到的事務項目通常應該由實際的請求處理程序方法生成。如果使用OpenSession/EntityManagerInView過濾器和/或@SessionAttributes註釋,這變得特別重要。

相關問題