具有多个执行不同操作的提交按钮的表单

form with multiple submit buttons that execute different actions

在将视图映射到控制器的操作并希望有人能指出正确的方向时,我遗漏了一些基本知识。我正在处理现有项目,并且仍在熟悉该语言及其配置方式。我有一个表单,可以通过 resolveForm 操作和 qaCase/resolve 视图解决 qaCase(问答案例)。以下是我所拥有内容的简化版本(如果我需要包含更多信息,请告诉我)。

QaCaseController

@RequestMapping(value="/resolve/{id}/**", method=RequestMethod.GET)
public String resolveForm(@PathVariable("id") Integer id, Model model) {
    QaCase qaCase = qaCaseDAO.findById(id);

    // Load the backing objects into the session
    model.addAttribute("qaCase", qaCase);       
    model.addAttribute("users", userDAO.findAll());
    model.addAttribute("exams", examDAO.findAll());

    return "qacases/resolve";
}

qaCase/resolve.jsp

解析视图有一个接受文本输入的表单和一个解析按钮。

<sf:form method="POST" modelAttribute="qaCase" onsubmit="return isValid()">
    // some input fields
    <input type="submit" name="submitted"  value="resolve" />
</sf:form>

单击提交按钮时,将创建以下查询字符串

http://localhost:8080/qacases/resolve/<id>/<location>/<name>/<created by>

我想做的是向现有表单添加一个额外的输入字段和按钮,这样我就可以选择添加评论而不是解决案例。

<sf:form method="POST" modelAttribute="qaCase" onsubmit="return isValid()">
    // some input fields
    <input type="submit" name="submitted"  value="resolve" />
</sf:form>
<sf:form method="POST" modelAttribute="qaCase" action="addComment">
    // optionally Add comment
    <input type="submit" name="submitted" value="addComment" />
</sf:form>

如果单击 addComment,那么我希望创建查询字符串。

http://localhost:8080/qacases/addComment

相反,我得到了以下带有 400 状态代码的查询字符串。

http://localhost:8080/qacases/resolve/<id>/<location>/<name>/<created by>/addComment

我一直在查看配置文件以查找映射是如何设置的,但一无所获。不确定这是否是可以在没有人检查项目并确定其配置方式的情况下回答的答案。感谢任何建议 and/or 答案。

当您在 <form>
中的 "addComment" 之前使用 action = "addComment" 而没有“/”时,这意味着您正在发布你的表格 current_url_that_invokes_view/addComment
如果将 "/" 添加到 action = "/addComment",您将转到 localhost:8080/addComment
所以如果你需要 http://localhost:8080/qacases/addComment
qacases 之前键入 action = "/qacases/addComment" 并注意 "/" 以直接 root url