Java 带2个按钮的Spring 3.2表单--请求语法不正确
我有下面的Spring 3.2表单。它有两个按钮,我想根据单击的按钮执行不同的操作Java 带2个按钮的Spring 3.2表单--请求语法不正确,java,spring-mvc,model-view-controller,spring-3,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) {
<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";
}
@RequestMapping(value=“/approve”,method=RequestMethod.POST,params={“approve”})
公共字符串批准(@RequestParam int-id、@RequestParam-String-approve、Model){
试一试{
公告批准公告(id);
model.addAttribute(“批准”,“您的公告已批准”);
List bulletins=bulletinDAO.getApprovedBulletins();
model.addAttribute(“公告”,公告);
}捕获(例外e){
System.out.println(e.getMessage());
返回“FailurePage”;
}
返回“重定向:/waitingBulletins”;
}
@RequestMapping(value=“/approve”,method=RequestMethod.POST,params={“deny”})
公共字符串拒绝(@RequestParam int-id,@RequestParam-String-deny,Model){
试一试{
丹巴列汀公报(id);
model.addAttribute(“批准”,“您的公告已被拒绝”);
List bulletins=bulletinDAO.getApprovedBulletins();
model.addAttribute(“公告”,公告);
}捕获(例外e){
System.out.println(e.getMessage());
返回“FailurePage”;
}
返回“重定向:/waitingBulletins”;
}
无论单击哪个按钮,我都会得到一个HTTP Status 400错误,其描述为“客户端发送的请求在语法上不正确”。正如您所看到的,每个方法都有一个int类型的参数。在我看来,问题在于我没有在JSP的表单中说明该方法,但我不清楚如何做到这一点。有人能帮忙吗
我不知道@RequestParam应该来自哪里。我想那是
问题的关键
是的,绝对是。javadoc声明
注释,指示方法参数应绑定到web请求参数
如果您没有合适的请求参数,它就不能这样做。在您的情况下,似乎没有请求参数
@RequestParam int id
其中,请求参数的名称将为
id
,因为您已向@RequestParam
提供了值
属性。您需要提供这样一个请求参数,可能带有
元素。让我们看看表单的其余部分,如果有的话。id
的@RequestParam
应该从哪里来?另外,您可以将记录器级别设置为DEBUG,以从Spring获得更多信息。我已经添加了表单的其余部分。我不知道@RequestParam应该来自哪里。我想这是问题的症结所在。谢谢你的帮助。我在表格中添加了这一行,解决了这个问题:
@Frank不客气。请注意,@RequestParam
有一个required
属性,您可以将该属性设置为false
。