我的SampleController中有以下代码;
@Controller
public class SampleController {
@RequestMapping("home")
public String loadHomePage(Model m) {
m.addAttribute("name", "CodeTutr");
return "home";
}
@RequestMapping(value="/test", method=RequestMethod.GET)
public String handlePost(@RequestParam String action, Model m) {
if( action.equals("save") ){
//handle save
}
else if( action.equals("renew") ){
//handle renew
}
m.addAttribute("name", "change");
return "home";
}
}
页面加载属性我设置它成功显示在网页上。我正试着在springmvc上点击按钮。下面是我的jsp代码;
<!DOCTYPE HTML>
<html>
<head>
<title>Sample Application</title>
</head>
<body>
<h1>Hello, ${name}!</h1>
<input type="submit" name="action" value="save" />
</body>
</html>
我的输入没有任何作用,handlePost方法永远不会被命中。我试图将属性"name"更改为单词"change",我不确定我做错了什么。
问题不在于Spring,而在于HTML。您无法提交按钮。您只能提交<form>
。
将<input>
元素包裹在<form>
中
<form action="<c:url value="/test" />" method="GET">
<input type="submit" name="action" value="save" />
</form>
其中,<c:url>
是core
标签库的url
标签。现在,当您单击该按钮时,浏览器将把<input>
元素序列化为url编码的表单参数并发送它们。它们将作为请求参数显示在您的服务器/web应用程序中。Spring将按名称反序列化它们,并在有@RequestParam
方法参数的地方将它们作为参数注入。
需要一个表单来封装您的输入。
仅供参考:您的"保存"one_answers"续订"用例应该是单独的控制器操作。
还要考虑从操作名称中删除"POST"。看到这个动作是用GET装饰的,而html正在说它的GET