2017-10-06 70 views
0

我有我的控制器中的這段代碼來獲取帶有表單的字段的頁面。獲取下拉ID到控制器

@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> 

我想要當用戶點擊提交按鈕來檢索所選擇的值thymeleaf視圖的一部分,這是一個應該處理它的控制器的方法:

@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>() 

我覺得因爲沒有這樣的ModelAttribute叫做Project。 如何在控制器中獲取項目的選定ID?

編輯

@RequestMapping(value = "/jiraImport", method = RequestMethod.POST) 
public String import(@ModelAttribute("project") Project project){ 
    System.out.println(project.getID()); 

    return "redirect:/projects"; 
} 

它改變了這一點。但是現在項目的ID是空的。但我可以看到日:值是該項目的

+0

使用這樣的公共字符串進口(@RequestParam(「valueyouwanttofetch」)整數測試) – Pradeep

回答

0

,而不是@ModelAttribute你必須使用@RequestParam

@RequestMapping(value = "/jiraImport", method = RequestMethod.POST) 
public String import(@RequestParam(name = "project") Integer projectID){ 
//System.out.println(projectID); 

    return "redirect:/projects"; 
} 
+0

這不會工作,因爲它不是一個請求參數 – akuma8

+0

有意外的錯誤(類型=錯誤的請求,狀態= 400)。 所需的整數參數'項目'不存在是使用您的解決方案時得到的錯誤 – Urban

0

我從來沒有使用過thymeleaf但正如你指出,你應該實際ID如果您想使用@ModelAttribute,請添加模型屬性。

我sugget你繼續這樣的:

<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> 

的想法是在這裏,我讓你用thymeleaf正確地做到這一點。在視圖中添加一個空的項目對象模型

@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"; 
} 

然後:

在後面,你可以這樣做:

@RequestMapping(value = "/jiraImport") 
public String import(@RequestParam("projectID") Integer projectID){ 
    //System.out.println(projectID); 
    return "redirect:/projects"; 
} 

第二個解決方案

<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,因此我讓您完成此代碼,例如添加提交按鈕和URL以發佈表單。

讓我們知道

+0

感謝您的努力。我嘗試過,但在我的控制器仍然作爲projectID爲空。當我檢查的HTML我清楚地看到projectID的不是null,但所有整數。 – Urban

+0

您是否在模型中添加了「新建項目()」,並在窗體中設置了「project.id」,使用th:value? – akuma8

+0

我這樣做了,我變得空作爲我的控制器中的ID – Urban