首页 > 解决方案 > 为什么@DateTimeFormat 在 th:text 中无效

问题描述

在我的 Spring Boot 2 应用程序中。

我的模型:

import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.validation.constraints.NotNull;
import java.util.Date;

@Entity
public class Category {
    @Id
    @GeneratedValue
    private int id;
    @NotNull
    private String name;
    private String description;
    @NotNull
    @DateTimeFormat(pattern = "dd.MM.yyyy HH:mm:ss")
    private Date created;
    @DateTimeFormat(pattern = "dd.MM.yyyy HH:mm:ss")
    private Date updated;

这里模板:

  <!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title th:text="${appName}">Category template title</title>
    <link th:href="@{/public/style.css}" rel="stylesheet"/>
    <meta charset="UTF-8"/>
</head>
<body>
<div class="container entity_list">
    <h2>Categories</h2>
    <br/>
    <table>
        <tr>
            <th width="80">ID</th>
            <th width="120">Name</th>
            <th width="200">Created At</th>
            <th width="200">Updated At</th>
            <th width="60"></th>
            <th width="60"></th>
        </tr>
        <th:block th:each="category : ${categoryList}">
            <tr>
                <td th:text="${category.id}"></td>
                <td th:text="${category.name}"></td>
                <td th:text="${category.created}"></td>
                <td th:text="${category.updated}"></td>
                <td><a th:href="@{/category/edit/{id}(id=${category.id})}">Edit</a></td>
                <td><a th:href="@{/category/delete/{id}(id=${category.id})}">Delete</a></td>
            </tr>
        </th:block>
    </table>
</div>
</body>
</html>

并在这里生成html:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link href="/public/style.css" rel="stylesheet"/>
    <meta charset="UTF-8"/>
</head>
<body>
<div class="container entity_list">
    <h2>Categories</h2>
    <br/>
    <table>
        <tr>
            <th width="80">ID</th>
            <th width="120">Name</th>
            <th width="200">Created At</th>
            <th width="200">Updated At</th>
            <th width="60"></th>
            <th width="60"></th>
        </tr>

            <tr>
                <td>1</td>
                <td>Toys</td>
                <td>2020-01-08 14:44:30.035</td>
                <td></td>
                <td><a href="/category/edit/1">Edit</a></td>
                <td><a href="/category/delete/1">Delete</a></td>
            </tr>

            <tr>
                <td>2</td>
                <td>Electronics</td>
                <td>2020-01-08 14:44:30.136</td>
                <td></td>
                <td><a href="/category/edit/2">Edit</a></td>
                <td><a href="/category/delete/2">Delete</a></td>
            </tr>

            <tr>
                <td>3</td>
                <td>Supermarket</td>
                <td>2020-01-08 14:44:30.138</td>
                <td></td>
                <td><a href="/category/edit/3">Edit</a></td>
                <td><a href="/category/delete/3">Delete</a></td>
            </tr>

    </table>
</div>
</body>
</html>

如您所见,日期的格式不是dd.MM.yyyy HH:mm:ss。为什么?

标签: spring-bootthymeleaf

解决方案


使用双括号表达式应该应用你的@DateTimeFormat. (这对于表单域会自动发生。)

<td th:text="${{category.created}}"></td>
<td th:text="${{category.updated}}"></td>

推荐阅读