2011-08-30 115 views
8

如何將Model/Command類配置爲綁定到特定的請求參數?Spring - ModelAttribute和參數名稱

例如我已經下面的方法:

@RequestMappint("/success") 
ModelAndView success(@ModelAttribute SomeCommand command) { 
    // process 
} 

和命令:

class SomeCommand { 
    String title 
} 

它的正常工作像/success?title=test請求,當請求參數名稱等於命令屬性名稱。

但是如果我需要映射一些不同的名稱呢?例如如果請求如:/success?sk_title=test

如何將請求參數sk_title映射到title我的命令字段?

這個命令有一堆PARAMS,並通過幾種不同的方法使用(它與其他傳統系統的集成),因此讓這一切參數爲每RequestMapped方法@RequestParam是大量的工作並且需要太多的複製/粘貼作業,這會帶來很多錯誤和不可支持的代碼。

輸入無法控制參數的名稱,它有很奇怪的名字,像「sk_yt_saf_amount」,這就是爲什麼我試圖綁定它更友好的屬性名稱。

PS我在這裏使用單詞'command'作爲輸入數據,從ModelAndView概念中將它與Model區分開來。

+0

難道你想在這裏使用類似@RequestParam(「sk_title」)的案件? – Infinity

+0

我在這裏有幾十個參數,所以爲他們容納容器要容易得多。並且它也被用於少數幾個地方/幾個具有不同邏輯的url,但數據結構相同 –

+0

如果情況如此,請在您的頁面GET請求中執行model.addAttribute(「myuser」,new MyUser())然後在您的@RequestMapping 「/ success」)方法可以添加@ModelAttribute(「myuser」)。在你的JSP表單中,使用spring form helper標籤,。這將有助於將所有提交的參數存儲到您的模型中。 – Infinity

回答

0
@RequestMapping("/success") 
    ModelAndView success(@RequestParam("sk_title") String title) { 
     SomeCommand command = new SomeCommand(); 
     command.setTitle(title); 
     model.addAttribute("title", command); 
     //rest of code here 
    } 

class SomeCommand { 
    String title 
    public void setTitle(String title){ 
    this.title = title; 
    } 
} 

如果您可以控制視圖上的name屬性,則可以更簡單。只需更改名稱屬性以匹配SomeCommand對象字段,spring將自動綁定它們。 How to bind request params in spring 3.0?您仍然需要將該命令添加到模型中,並且此答案假定您使用的是Spring 3或更高版本。我假設spring也可能需要getCommand對象的字段上的getter和setter。

@RequestMapping 
public ModelAndView success(SomeCommand someCommand) { 
    model.addAttribute("someCommand", someCommand); 
} 
+1

對不起,但我問如何填寫SomeCommand屬性 –

+0

@splix代碼現在更新,我更瞭解您的問題。 –

+0

好主意,但我怎麼能沒有手動參數映射?更容易和春天的方式。註釋也許?或DataBinder配置?在Command中有很多屬性,並且只有很少的動作被使用 - 它會被複制/粘貼 –

0

如果你想映射請求參數sk_title到標題字段,然後用名sk_title添加二傳手:

public class SomeCommand { 
    private String title; 

    public String getTitle() { 
     return title; 
    } 

    public void setSk_title(String title) { 
     this.title = title; 
    } 
} 
相關問題