如何在Spring mvc中控制同一个url的两个操作?

时间:2014-09-26 15:45:52

标签: spring spring-mvc

考虑以下问题。

用户已选择通过单击“创建”文档创建文档,然后将数据写入文档。用于创建文档的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。有没有解决这个问题的工作?

提前致谢。希望你能尽快回复。

1 个答案:

答案 0 :(得分:0)

如果表单字段具有匹配的名称,则表单字段将自动绑定到您的DocumentWrapper字段,这意味着DocumentWrapper需要名为 document_id 的字段,否则 document_id < / em>请求参数不会绑定到您的对象。

模型属性将暴露给视图,此时模型将为空,您可以在处理程序方法中添加属性,它们将在您的视图中,但请求参数将不在模型中。这就解释了为什么你总是得到null。

如果您只需要 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