2014-09-26 51 views
0

考慮以下問題。如何在Spring mvc中爲同一個url控制兩個操作?

用戶已選擇通過點擊創建文檔創建一個文檔,然後他將數據寫入到文件。用於創建文檔的URL是/ document/save。

對於後續的寫了起來,現有的文件必須保存,而不是創建一個新的。

這裏是我的代碼。

@Controller 
public MyController implements Controller, TemplateTypeAware 
{ 
     @RequestMapping("/document/save") 
     public String saveOrCreateDocument(@ModelAttribute DocumentWrapper wrapper, ModelAndView m) 
     { 
       if(m.getModel().get("document_id")==null) 
       { 
       Document doc=createDocument(wrapper); 
       m.addObject("document_id",doc.getId()); 
       } 
       else 
       { 
       saveDocument(m.getModel().get("document_id"), wrapper); 
       } 
      return documentView; 
     } 
} 

模板:

<form> 
<input type="hidden" name="document_id" th:value="*{document_id}"/> 
<!-- other fields --> 
</form> 

這裏的問題是,我得到document_id總是null。有沒有解決這個問題的方法?

在此先感謝。希望你能儘快回覆。

+0

它爲什麼會比'null'其他什麼嗎?如果您要發送現有文檔的請求,則需要在請求中標識該文檔。 – 2014-09-26 15:49:38

+0

您是否將document_id作爲請求參數發送? – 2014-09-26 15:52:21

+0

第一次訪問頁面時,必須完成創建,因此不會有'document_id',爲了後續保存,我已將'document_id'模型添加爲對象。當我設置該對象時,我將返回與更新後的問題中相同的視圖。 – user12458 2014-09-26 16:02:19

回答

0

表單域會,如果他們匹配的名字被自動綁定到你的DocumentWrapper領域,這意味着DocumentWrapper需要一個名爲場DOCUMENT_ID,否則DOCUMENT_ID請求參數將不會被綁定到你的對象。

模型屬性會接觸到的觀點,在這一點上,模型將是空的,你可以在你的處理方法添加屬性,他們將成爲你的觀點,但請求參數不會在模型中。這就解釋了你爲什麼總是空白。

如果你只需要DOCUMENT_ID參數,使用@RequestParam

@RequestMapping("/document/save") 
public String saveOrCreateDocument(@RequestParam("document_id") Long documentId, Model m) { 
... 
} 

請參考Spring MVC中的結合部分:http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/mvc.html#mvc-ann-requestparam

+0

但是在創建文檔時,不會有'documentId'。如何才能做到這一點? – user12458 2014-09-27 11:15:50

+0

我其實在我看來確實是首次創建時的文件,然後我得到的是放在模型屬性的ID,這個屬性值(文檔ID)被置爲將提交表單的隱藏字段值。現在,因爲它是表單的一部分,所以我應該得到document_id,但問題是我無法得到它,即返回null。 – user12458 2014-09-27 14:23:05

+0

這裏視圖不會更新新的值集。 – user12458 2014-09-27 16:46:45

相關問題