这是我的html表单:
<form ui-jp="parsley" th:action="@{/users/created}" th:object="${userCreateDto}" method="post">
<div class="row m-b">
<div class="col-sm-6">
<div class="form-group">
<label>User Valid From</label>
<input type='date' class="form-control" th:field="*{validFrom}" required/>
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label>User Valid To</label>
<input type='date' class="form-control" th:field="*{validTill}" required/>
</div>
</div>
</div>
</form>
这是控制器:
@RequestMapping(value = "/created", method = RequestMethod.POST)
public String processCreateUsers(@ModelAttribute UserCreateDto userCreateDto, BindingResult error) {
log.info("Creating users with this input :"+ userCreateDto.toString());
this.userService.createUser(userCreateDto);
return "redirect:/users";
}
这就是DTO
public class UserCreateDto {
private String username;
private String firstName;
private String lastName;
private String password;
@DateTimeFormat(pattern = "yyyy-mm-dd")
private Date validFrom;
@DateTimeFormat(pattern = "yyyy-mm-dd")
private Date validTill;
}
此处日期为java.sql.Date
此外,当我通过JSON文件导入时,我有一组用户 - 我能够成功运行它。
当我在视图中运行时,我将validFrom
和validTill
的值设为null。
此外,当我在单击提交后检查表单数据时 - 所有必需的输入都已正确设置。事件日期参数设置在那里。
这是我打印BindingResult错误的时候:
Failed to convert property value of type 'java.lang.String' to required type 'java.sql.Date' for property 'validFrom'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type [java.lang.String] to type [@org.springframework.format.annotation.DateTimeFormat java.sql.Date] for value '2017-12-10'; nested exception is org.springframework.core.convert.ConverterNotFoundException: No converter found capable of converting from type [org.joda.time.DateTime] to type [@org.springframework.format.annotation.DateTimeFormat java.sql.Date]
我在这里缺少什么?
注意:java.util.Date有效!
答案 0 :(得分:0)
您的表单需要有一个可以绑定这些参数的bean。您可以使用@GetMapping
(和@PostMapping
)作为速记。
@GetMapping("/theHtmlFormInYourQuestion")
public String createUsers(Model model) {
model.addAttribute("userCreateDto", new UserCreateDto());
return "theHtmlFormInYourQuestion";
}
您的表单操作应该使用created
而不是users/created
,因为这是您的Java代码显示的内容(除非您正在执行其他未在您的问题中发布的内容)。
答案 1 :(得分:0)
将HTML中的input type='date'...
更改为input type='text'...
。
如果您需要在输入上设置样式,请尝试选择其中一个可用的日期选择器。
Thymeleaf和输入类型Date
存在特定问题,在接受的答案here中对此进行了解释。