弹簧 - 形式有2个按钮发送到2个不同的控制器

时间:2017-05-16 15:37:45

标签: java spring forms spring-mvc submit

我有带有2个提交按钮的Spring 4 MVC表单。我希望这些按钮指向两个不同的控制器。问题是一个表单应该有固定的动作参数集。 这是我的表格:

<form:form method="post" action="pageAction" commandName="id">
  <button type="submit" class="btn btn-primary" name="addBasket">
    Add Basket
  </button>
  <button type="submit" class="btn btn-danger" name="addProduct">
    Add Product
  </button>
</form:form>

这些按钮可能会到达两个不同的控制器吗?我将只发送ID,在addBasket中它将是basketId,在addProduct中它将是productId。这些是控制器:

@Controller
public class BasketController {

    @RequestMapping(value = "/addBasket", method = RequestMethod.POST)
    public ModelAndView addBasket(@ModelAttribute("id") Integer id) {
        //method - addBasket(id);
    }
}

@Controller
public class ProductController {

    @RequestMapping(value = "/addProduct", method = RequestMethod.POST)
    public ModelAndView addProduct(@ModelAttribute("id") Integer id) {
        //method - addProduct(id);
    }
}

3 个答案:

答案 0 :(得分:0)

我不确定是否有您想要的解决方案,但另一种方法是在if中使用/addItem语句检查name的值:

@Controller
public class ItemController {

    @RequestMapping(value = "/addItem", method = RequestMethod.POST)
    public ModelAndView addItem(@ModelAttribute("id") Integer id, @ModelAttribute("name") String name) {
        if ("basket" == name) {
            basketController.addBasket(id);
        } else {
            productController.addProduct(id);
        }
    }
}

答案 1 :(得分:0)

您可以在提交按钮上添加一个onclick事件,该事件将调用一个javascript函数,您可以根据需要决定/更改URL。

<button type="submit" class="btn btn-primary" name="addBasket" onClick="javascript:addBasket()">

<button type="submit" class="btn btn-primary" name="addProduct" onclick="javascript:addProduct()">

添加任意数量的javascript函数,例如:

function addBasket() {
var requestURL = '/addBasket';
var formData = $("#formName").serialize();

$.ajax({
    type: 'POST',
    data: formData,
    url: requestURL,
    success: function (data1) {
     //do what is required after success
    },
    error: function (xhr) {
        //in case of failure
    }
});

}

答案 2 :(得分:0)

如果您使用的是html 5和兼容的浏览器,则可以根据需要使用按钮的表单和格式属性进行定位。详见w3schools