带有2个按钮的Spring 3.2表单 - 请求语法错误

时间:2014-03-09 03:23:57

标签: java spring-mvc model-view-controller spring-3

我有以下Spring 3.2表单。它有两个按钮,我想根据点击的按钮执行不同的操作。

<form:form action="approve" method="post">
    <%
        List<Bulletin> bulletins = (List<Bulletin>) request.getAttribute("bulletins");
        for (Bulletin bulletin : bulletins) {
            bulletin.setNote(bulletin.getNote().replace("\n\n", "\n "));
            String[] bulletinArray = bulletin.getNote().split("\n");
            out.println("<b>Name:</b> " + bulletin.getName() + "<br>");
            out.println("<b>Date:</b> " + bulletin.getDate() + "<br>");
            out.print("<b>Comment:</b> ");
            for (int i = 0; i < bulletinArray.length; i++) {
                if (i == bulletinArray.length - 1) {
                    out.println(bulletinArray[i]);
                } else {
                    out.println(bulletinArray[i] + "<br />");
                }
            }
            out.println("<br><br>");
        }
    %>
            <td><input type="submit" name="approve" value="Approve" /></td>
            <td><input type="submit" name="deny" value="Deny" /></td>
            <br />
        </form:form>

我的控制器中有以下方法。

@RequestMapping(value = "/approve", method = RequestMethod.POST, params = { "approve" })
public String approve(@RequestParam int id, @RequestParam String approve, Model model) {
    try {
        bulletinDAO.approveBulletin(id);
        model.addAttribute("approval", "Your bulletin has been approved.");

        List<Bulletin> bulletins = bulletinDAO.getApprovedBulletins();
        model.addAttribute("bulletins", bulletins);
    } catch (Exception e) {
        System.out.println(e.getMessage());
        return "FailurePage";
    }

    return "redirect:/waitingBulletins";
}

@RequestMapping(value = "/approve", method = RequestMethod.POST, params = { "deny" })
public String deny(@RequestParam int id, @RequestParam String deny, Model model) {
    try {
        bulletinDAO.denyBulletin(id);
        model.addAttribute("approval", "Your bulletin has been denied.");

        List<Bulletin> bulletins = bulletinDAO.getApprovedBulletins();
        model.addAttribute("bulletins", bulletins);
    } catch (Exception e) {
        System.out.println(e.getMessage());
        return "FailurePage";
    }

    return "redirect:/waitingBulletins";
}

无论我点击哪个按钮,都会收到HTTP Status 400错误,其描述为“客户端发送的请求在语法上不正确”。如您所见,每个方法都有一个int类型的参数。在我看来问题是我没有在我的JSP中的表单中考虑该方法,但我不清楚如何做到这一点。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

  

我不知道@RequestParam应该来自哪里。我想是的   这个问题的关键。

是的,绝对的。 @RequestParam javadoc状态

  

注释,指示应将方法参数绑定到Web请求参数。

如果您没有合适的请求参数,则无法执行此操作。在您的情况下,您似乎没有

的请求参数
@RequestParam int id

,因为您向id提供了value属性,因此请求参数的名称将为@RequestParam。您需要提供这样的请求参数,可能带有<input>元素。