在Thymeleaf中格式化th:field

14

我在Thymeleaf中有一个表单输入字段。该字段(在下面的代码片段中为bookingEntry.datefrom)的类型为Date。我使用了一个日期选择器,以允许用户选择和格式化所需的日期以输入该字段。这一切都很好。

然而,我希望所显示的日期的初始值(我已将其设置为当前日期)以我选择的格式显示。那么,如何在th:field中格式化最初显示的日期?th:value被忽略(Thymeleaf从后端对象获取值,正如它应该做的),并且我似乎无法对th:field应用格式。

Thymeleaf代码为:

<input type="text" class="form-control getdate"
       th:field="*{datefrom}" placeholder="Date From"
       th:value="${#dates.format(bookingEntry.datefrom, 'dd-MMM-yyyy')}"/>

我相信我可以使用任何格式初始化的字符串,而不是日期类型,但我想知道是否有一种方法可以在th:field中格式化初始值?

非常感谢

2个回答

25

因为我对Spring的知识有限,所以错过了简单的答案。在此添加说明,以帮助像我这样的新手。

@DateTimeFormat注释放置在传递给表单的对象中的元素上即可解决问题。它确保Date对象按照您希望的方式格式化(无论是否使用Thymeleaf)。

在上面的示例中,在bookingEntry对象中。

@Temporal(DATE)
@DateTimeFormat (pattern="dd-MMM-YYYY")
private Date datefrom;

1
我也错过了这个解决方案。当我使用jquery ajax提交thymeleaf表单时,它也可以工作,并且由于Thymeleaf中不支持的默认格式,Jackson无法将日期值反序列化为java.util.Date。 - bwfrieds
这对我没用。当我提交一个空值的表单时,表单提交会解析一个空的日期,但是当我提交与DateTimeFormat注释中样式匹配的日期时,我会得到一个“错误请求,验证失败”的错误,状态码为400。 - djangofan
尝试了许多其他方法后,这个方法非常有效。顺便提一下,日期格式应该是“MM/d/yyyy”,例如03/14/2015。 - chAmi
哥们儿...谢谢你,现在我感觉自己像个白痴 xD - Jp Silver

4

如果日期为空,将会出现错误。在解析日期之前,我们必须先检查其值。

<input  type="text" name="date" 
        th:value="${user.dateOfBirth}?${#dates.format(user.dateOfBirth, 'dd-MM-yyyy')}:''" 
        placeholder="dd-mm-yyyy"  id="pickyDate"/>

有人评论说,如果在提交之前禁用HTML字段,则无需担心解析问题,这确实有效。 - Raul Lapeira Herrero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接