来自百里香的日期始终为空

时间:2017-12-11 18:41:16

标签: java spring spring-mvc thymeleaf

这是我的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文件导入时,我有一组用户 - 我能够成功运行它。

当我在视图中运行时,我将validFromvalidTill的值设为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有效!

2 个答案:

答案 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中对此进行了解释。