gpt4 book ai didi

Spring 与 Thymeleaf 以 html 形式绑定(bind)日期

转载 作者:行者123 更新时间:2023-12-03 01:12:54 25 4
gpt4 key购买 nike

我有一个简单的表单片段,例如:

<form th:action="@{'/save'}" th:object="${account}" method="post">
<div class="form-group">
<label for="expirationDate">Expiration date</label>
<input type="datetime-local" class="form-control" id="expirationDate"
placeholder="Expiration date" th:field="*{expirationTime}"/>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>

我向那里传递一个填充对象accountexpirationTime是一个LocalDateTime字段。问题是 expirationTime 未与传递给表单的值绑定(bind)(传递的对象是 100% 正确的)。知道为什么吗?

最佳答案

编辑:简单地说,Spring/Thymeleaf 无法针对日期时间本地输入类型正确格式化 Java 8 日期。告诉 Spring 如何使用 @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm") 正确格式化值。

<小时/>

注释@DateTimeFormat告诉Thymeleaf在解析/格式化时如何格式化日期字符串。这包括在 HTML 输入中生成 value= 注释,以及读取表单提交的 POST 数据。 datetime-local 输入类型需要一个格式为 yyyy-MM-dd'T'HH:mm 的值,因此我们将其用作模型类中的格式化程序。

模型类:

public class DateContainer {

private String name;

@DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm")
private LocalDateTime dateTime;

public LocalDateTime getDateTime() {
return dateTime;
}

public void setDateTime(LocalDateTime dateTime) {
this.dateTime = dateTime;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}
}

Controller :

@RequestMapping("/dateTest")
public String dateTest(final DateContainer dateContainer) {
if (dateContainer.getDateTime() == null) {
dateContainer.setDateTime(LocalDateTime.now());
}
return "dateTest";
}

模板:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org/">
<head></head>
<body>
<h1>Hello World!</h1>
<form th:action="@{/dateTest}" th:object="${dateContainer}">
<label>Name: </label><input type="text" th:field="*{name}"/>
<label>Date Time: </label><input type="datetime-local" th:field="*{dateTime}"/>
<input type="submit" value="Submit"/>
</form>
</body>
</html>

生成的 HTML:

<!DOCTYPE html>
<html>
<head></head>
<body>
<h1>Hello World!</h1>
<form action="/dateTest">
<label>Name: </label><input type="text" id="name" name="name" value="" />
<label>Date Time: </label><input type="datetime-local" id="dateTime" name="dateTime" value="2017-08-28T13:01" />
<input type="submit" value="Submit" />
<input type="hidden" name="_csrf" value="437b30dc-a103-44d0-b4e9-791d8de62986" /></form>
</body>
</html>

屏幕截图:

Screenshot in Chrome 60

兼容性:

日期时间本地输入类型是一种新的 HTML5 类型,并非所有浏览器都支持。请参阅兼容性:https://caniuse.com/#search=datetime-local

在不兼容的浏览器中,日期时间本地字段将仅显示为文本字段,并且包含日期和时间,中间带有 T。根据您的用例,这可能会导致可用性问题。

关于Spring 与 Thymeleaf 以 html 形式绑定(bind)日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45629318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com