2012-04-14 109 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