获取下拉ID到控制器

时间:2017-10-06 08:01:17

标签: java spring thymeleaf

我在我的控制器中有这段代码来到一个带有表单字段的页面。

@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

2 个答案:

答案 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,所以我让你完成这段代码,例如添加提交按钮和发布表单的网址。

告诉我们