2012-04-14 91 views
0

我的应用程序一直使用提交名称作为操作名称。到目前为止它已经工作。Spring 3 MVC,多部分表单和控制器映射问题

输入多形式...

HTML

<form:form modelAttribute="screenObject" enctype="multipart/form-data"> 
<input name="save" value="Save" type="submit" /> 

控制器

public static final String ACTION_SAVE="save"; 
@RequestMapping(method=RequestMethod.POST, params=ACTION_SAVE) 
public ModelAndView save(@ModelAttribute("screenObject") FileHeaderEditScreenObject screenObject, BindingResult bindingResult, Model model, Locale locale) { 

错误

message Request method 'POST' not supported 

如果我删除enctype="multipart/form-data",控制权将流入save方法。我确实需要对这个多部分表单进行不同的操作。我想保持consitent,所以我希望我不必介绍任何隐藏的领域来表示行动或提交表单到不同的网址...

回答

0

我建议从注释中删除params=ACTION_SAVE。 看起来它不会解析来自多部分请求的提交操作。

您可以处理该参数作为一个请求参数:

@RequestMapping(method=RequestMethod.POST, params=ACTION_SAVE) 
public ModelAndView save(
    @RequestParam(value = "submit", required = true) String action, 
    @ModelAttribute("screenObject") .... 

{ 
    switch (action) { 
     case "action1": ... 
     case "action2": ... 
    } 
} 

这是不是很好。我只会使用这样的不同的URL:

@RequestMapping("/action1"}) 
    public void action1(

@RequestMapping("/action2"}) 
    public void action2(
+0

正如我在我的问题中提到的,我有多个操作来处​​理此控制器。每个操作一个控制器方法。 'params = ACTION_SAVE'需要保留或者是:Spring MVC是无用的。 – jacekn 2012-04-14 03:42:55

+0

看到我的更新。我一直在使用第二种方法 - 完美的作品。 – 2012-04-14 04:13:01