如何从我的视图输入到我的控制器 - SPRING JAVA JPA THYMELEAF

时间:2017-05-28 14:58:33

标签: java spring maven thymeleaf

我正在使用java,maven,JPA和thymeleaf开发webApp,我遇到了这个问题:

我的控制器中有这个方法:

@RequestMapping(value = "/admin/searchResults", method = RequestMethod.GET)
public String listResults(@ModelAttribute Step step,Model model,@PathVariable("dateStart") Date dateStart,@PathVariable("dateEnd") Date dateEnd){

    model.addAttribute("dateStart", dateStart);
    model.addAttribute("dateStart", dateEnd);
    return "thisAreTheDates";
}

这是视图的一个片段,理论上必须将2个日期参数发送给我的花哨控制器:

<div class="container">
        <form class="form-inline" data-th-action="@{/admin/searchResults}" method="get" >
            <div class="input-group">
                <div class="form-group">
                    <label>From:</label>
                    <input type="date" id="dateStart"  class="form-control"/>
                    <label>To:</label>
                    <input type="date" id = "dateEnd"  class="form-control"/>
                </div>
            </div>
            <br/>
            <button type="submit" class="button">Generate Report</button>
        </form>
</div>

一切都很顺利,直到我进入该视图,用2个日期填充字段,当我按下生成报告按钮时,出现此错误:

  

Whitelabel错误页面

     

此应用程序没有/ error的显式映射,因此您将此视为后备。

     

Sun 5月28日10:54:07 BOT 2017   出现意外错误(type = Internal Server Error,status = 500)。   缺少URI模板变量&#39; dateStart&#39;对于Date类型的方法参数

1 个答案:

答案 0 :(得分:0)

在HTML中,您需要分别为name="dateStart"name="dateEnd"输入字段添加dateStartdateEnd。这将允许您的表单连接到您的模型属性。

此外,您需要向使用@PostMapping注释的控制器添加一个方法,以实际处理您希望使用表单输入完成的操作。

最后,您不希望在HTML get上使用form,但更有可能post

所以:

@GetMapping("/admin/searchResults") //use the shorthand
public String listResults(@ModelAttribute("step") Step step,
                          @PathVariable("dateStart") Date dateStart,
                          @PathVariable("dateEnd") Date dateEnd,
                          Model model) {
    Step step = new Step();  //or however you are creating this
    model.addAttribute("step", step);
    model.addAttribute("dateStart", dateStart);
    model.addAttribute("dateStart", dateEnd);
    return "thisAreTheDates";
}

你的帖子映射:

@PostMapping("/admin/searchResults") //use the shorthand
public String postResults(@ModelAttribute("step") Step step, 
                          Errors result) {

    //validate your step bean
    someValidator.validate(step, result);

    //persist it, do whatever
    someService.save(step);

    return "confirmationPage";
}

更新了HTML:

<div class="container">
     <form class="form-inline" th:object="${step}" th:action="@{/admin/searchResults}" method="post" >
         <div class="input-group">
             <div class="form-group">
                 <label>From:</label>
                 <input type="date" name="dateStart" id="dateStart"  class="form-control"/>
                 <label>To:</label>
                 <input type="date" name="dateEnd" id="dateEnd" class="form-control"/>
             </div>
         </div>
         <br/>
         <button type="submit" class="button">Generate Report</button>
     </form>
</div>