Spring - 带有 2 个按钮的表单发送到 2 个不同的控制器

Spring - form with 2 buttons sending to 2 different controllers

我有 Spring 4 个带有 2 个提交按钮的 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);
    }
}

我不确定是否有您想要的解决方案,但替代方法可能是在 /addItem 中使用 if 语句检查 name:[=14 的值=]

@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);
        }
    }
}

您可以在提交按钮上添加一个 onclick 事件,它会调用一个 javascript 函数,其中您可以根据要求 decide/change 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
    }
});

}

如果您使用的是html5及兼容的浏览器,您可以根据需要使用按钮的form和formaction属性来定位。在 w3schools

查看详情