【问题标题】:Spring 3 MVC, multipart form and controller mapping issueSpring 3 MVC,多部分表单和控制器映射问题
【发布时间】:2012-04-14 02:53:17
【问题描述】:

我的应用程序始终使用提交名称作为操作名称。到目前为止它已经奏效了。

输入多部分表单...

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 方法。我确实需要对这个多部分表单执行不同的操作。我想保持一致,所以我希望我不必引入任何隐藏字段来表示操作或将表单提交到不同的 url...

【问题讨论】:

    标签: spring controller multipart


    【解决方案1】:

    我建议从注释中删除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(
    

    【讨论】:

    • 正如我在问题中提到的,我有多个操作要让这个控制器处理。每个动作一个控制器方法。 params=ACTION_SAVE 需要留下,不然就是:Spring MVC 没用。
    • 查看我的更新。我一直在使用第二种方法——效果很好。
    猜你喜欢
    • 2020-01-16
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 2018-03-27
    相关资源
    最近更新 更多