我正在使用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类型的方法参数
答案 0 :(得分:0)
在HTML中,您需要分别为name="dateStart"
和name="dateEnd"
输入字段添加dateStart
和dateEnd
。这将允许您的表单连接到您的模型属性。
此外,您需要向使用@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>