我在我的控制器中有这段代码来到一个带有表单字段的页面。
@RequestMapping(value = "/Import", method = RequestMethod.GET)
public String import(Model model){
List<Project> projects = this.projectService.getAllProjects();
model.addAttribute("projects", projects);
model.addAttribute("type", "");
return "Import";
}
这是使用的百里叶视图的一部分
<div class="form-group" th:object="${project}">
<label class="col-md-4 control-label">Project</label>
<select class="form-control">
<option th:each="project : ${projects}" th:value="${project.id}" th:text="${project.name}"></option>
</select>
</div>
我想在用户单击提交按钮时检索所选值,这是应该处理它的控制器方法:
@RequestMapping(value = "/jiraImport", method = RequestMethod.POST)
public String import(@ModelAttribute("project") Integer projectID){
//System.out.println(projectID);
return "redirect:/projects";
}
我收到错误:
java.lang.NoSuchMethodException: java.lang.Integer.<init>()
我认为因为没有名为Project的ModelAttribute。 如何在控制器中获取项目的选定ID?
修改
@RequestMapping(value = "/jiraImport", method = RequestMethod.POST)
public String import(@ModelAttribute("project") Project project){
System.out.println(project.getID());
return "redirect:/projects";
}
将其更改为此。但现在项目的ID为空。但我可以看到th:value是项目的实际ID
答案 0 :(得分:0)
而不是@ModelAttribute,你必须使用@RequestParam
@RequestMapping(value = "/jiraImport", method = RequestMethod.POST)
public String import(@RequestParam(name = "project") Integer projectID){
//System.out.println(projectID);
return "redirect:/projects";
}
答案 1 :(得分:0)
我从未使用过百里香,但正如您所指出的,如果您想使用@ModelAttribute
,则应添加模型属性。
我建议你这样做:
<select class="form-control">
//each <option> tag should be a "/jiraImport" parameterized by ${project.id} like this :
<option> <a href="/jiraImport?projectID=${project.id}"...>...
</select>
这个想法就在这里,我让你用百里香来正确地做到这一点。
在后面你可以这样做:
@RequestMapping(value = "/jiraImport")
public String import(@RequestParam("projectID") Integer projectID){
//System.out.println(projectID);
return "redirect:/projects";
}
第二个解决方案:在模型中添加一个空项目对象
@RequestMapping(value = "/Import", method = RequestMethod.GET)
public String import(Model model){
List<Project> projects = this.projectService.getAllProjects();
model.addAttribute("projects", projects);
model.addAttribute("project", new Project());
return "Import";
}
然后在视图中:
<form method="POST" th:object="${project}">
<div class="form-group" th:object="${project}">
<label class="col-md-4 control-label">Project</label>
<select class="form-control">
<option th:each="project : ${projects}" th:value="${project.id}" th:text="${project.name}"></option>
</select>
</div>
</form>
最后在后面:
@RequestMapping(value = "/jiraImport", method = RequestMethod.POST)
public String import(@ModelAttribute("project") Project project){
System.out.println(project.getId);
return "redirect:/projects";
}
如上所述,我没有使用Thymeleaf,所以我让你完成这段代码,例如添加提交按钮和发布表单的网址。
告诉我们