2014-01-16 40 views
1

我有RequestMapping.PUT控制器方法和具有URI彈簧3:綁定相同的控制器的方法,以多個形式動作

@RequestMapping(value = "/add/email", method = RequestMethod.POST) 
public String addNewAccountEmail(@Valid @ModelAttribute EmailClass emailObject, BindingResult bindingResult, Model model) { 
    return displayForm(model); 
} 

我有這樣一種形式:

<form:form id="add-user-email" action="/add/email" name="manageUserAddEmail" method="post" modelAttribute="accountEmail"> 

欲有更多表格指向相同動作,但需要做addNewAccountEmail方法中的不同操作。那麼我怎麼能在Spring中實現這個呢?基本上任何參數可以使我區分功能或以某種方式我可以有多個方法具有相同的RequestMapping URL和方法?

我只能使用RequestMethod.POST,因爲我對其他方法也有類似的要求。

基本上我不想在調用操作時在瀏覽器中更改URL,這就是爲什麼我想要所有表單操作指向相同的操作URL。

+0

它完全不清楚你在問什麼。什麼是添加帳戶電子郵件,添加家長電子郵件什麼是'com.abcd.AllURLS.user_email'? –

+0

編輯的問題。如果您有任何疑問,請告訴我。 –

回答

2

您可以指向所有的形式在同一個控制器方法,然後通過尋找特定形式請求參數區分該方法中的具體形式的功能。

每個表單需要添加自己的請求參數來識別它 - 比如:

<input type="hidden" name="form1_param" value="1"/> 

然後你就可以通過檢查HttpServletRequest改變方法內的行爲:

@RequestMapping(value = "/add/email", method = RequestMethod.POST,) 
public String addNewAccountEmail(@Valid @ModelAttribute EmailClass emailObject, BindingResult bindingResult, Model model, HttpServletRequest request) { 

    if (request.getParameter("form1_param") != null) { // identifies 1st form 
     // Do something 
    } else if (request.getParameter("form2_param") != null) { // indentifies 2nd form 
     // Do something else 
    } 

    ... 
} 

然而,將多個控制器方法映射到相同的路徑會更清晰,但在RequestMapping中指定不同的參數 - 區分不同的表單。

@RequestMapping(value = "/add/email", params="form1_param", method = RequestMethod.POST) 
public String addNewAccountEmail1(@Valid @ModelAttribute EmailClass emailObject, BindingResult bindingResult, Model model) { 

    // Do something specific for form1 
    return displayForm(model); 
} 

而且也:

@RequestMapping(value = "/add/email", params="form2_param", method = RequestMethod.POST) 
public String addNewAccountEmail2(@Valid @ModelAttribute EmailClass emailObject, BindingResult bindingResult, Model model) { 

    // Do something specific for form2 
    return displayForm(model); 
} 

等等

+0

謝謝...使用參數它工作..! –

1

@RequestMapping接受數組作爲參數(使用語義)。

@RequestMapping(
    value = "/add/email", 
    method = { RequestMethod.POST, RequestMethod.PUT }) 
+0

使用多種方法不適合我。我需要使用相同的方法和值,但不知何故需要支持多種功能。要麼使用多種方法,要麼使相同的方法區分功能? –

+0

你爲什麼認爲我建議使用兩種方法?再次仔細閱讀答案。這正是你想要的。 –

相關問題