2014-01-16 3 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 метод. Итак, как я могу достичь этого весной? В принципе, любой параметр, который может заставить меня дифференцировать функциональные возможности или каким-то образом я могу иметь несколько методов, имеющих одинаковый URL и метод URL-адреса RequestMapping?

Я могу использовать 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); 
} 

Etc.

+0

Спасибо ... используя params, он сработал ..! –

1

@RequestMapping принимает массивы в качестве параметров (с использованием или).

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

Использование нескольких методов для меня не является вариантом. Мне нужно использовать тот же метод и значение, но каким-то образом нужно поддерживать множественные функции. Либо использование нескольких методов, либо один и тот же метод дифференцирует функциональные возможности? –

+0

Почему, по-вашему, я предлагаю использовать два метода? Внимательно прочитайте ответ. Это именно то, что вы хотите. –