【问题标题】:Spring 3.2 form with 2 buttons -- request syntactically incorrect带有 2 个按钮的 Spring 3.2 表单——请求语法不正确
【发布时间】:2023-03-06 05:27:02
【问题描述】:

我有以下 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 状态 400 错误,描述为“客户端发送的请求在语法上不正确”。如您所见,每个方法都有一个 int 类型的参数。在我看来,问题在于我没有在我的 JSP 中以表格的形式说明该方法,但我不清楚如何做到这一点。有人可以帮忙吗?

【问题讨论】:

  • 让我们看看表格的其余部分,如果有的话。
  • id@RequestParam 应该从哪里来?
  • 另外,您可以将记录器级别设置为 DEBUG 以从 Spring 获取更多信息。
  • 我已经添加了表格的其余部分。我不知道 @RequestParam 应该来自哪里。我认为这是问题的症结所在。

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


【解决方案1】:

我不知道@RequestParam 应该来自哪里。我认为那是 问题的关键。

是的,当然。 @RequestParam javadoc 状态

表示方法参数应绑定到 Web 请求参数的注解。

如果您没有适当的请求参数,它就无法做到这一点。在您的情况下,您似乎没有

的请求参数
@RequestParam int id

其中请求参数的名称将为id,因为您已向@RequestParam 提供了value 属性。您需要提供这样的请求参数,可能带有&lt;input&gt; 元素。

【讨论】:

  • 感谢您的帮助。我已将此行添加到我的表单中,从而解决了问题:&lt;td&gt;&lt;input type="hidden" name="id" value="${bulletin.getId()}"&gt;&lt;/td&gt;
  • @Frank 不客气。请注意,@RequestParam 有一个 required 属性,您可以将其设置为 false
猜你喜欢
  • 1970-01-01
  • 2016-05-14
  • 1970-01-01
  • 2016-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多