Просматривать объекты календаря в формах тимелина как типы дат

У меня есть объект пользователя, и у пользователя есть поле DOB (Дата рождения). Я сохранил это поле в виде календаря внутри BO пользователя.

Что-то вроде этого:

открытый класс UserBO {

private Calendar dateOfBirth;

public Calendar getDateOfBirth() {
    return dateOfBirth;
}

public void setDateOfBirth(Calendar dateOfBirth) {
    this.dateOfBirth = dateOfBirth;
}

}

Теперь мне нужно отобразить это поле как поле даты в тимили, а не в текстовом поле. Мне нужно поле даты, так как мне нравится сборщик дат:)

Это то, что я до сих пор

<label class="col-xs-2">Date of Birth</label>
    <div class="col-xs-2">
    <input type="date" class="form-control" th:field="*{dateOfBirth}" placeholder="Date of Birth" />
    </div>  

Но это дает мне вывод как

Изображение вывода

это не то, что я ожидаю. Я ожидаю, что фактическая дата будет заполнена службой, но она показывает мне это, как указано выше.

Я читал о Серализации и десериализации объектов Календаря и написании каких-то конвертеров, но я не получил полного контекста, почему это требуется. плюс, когда я видел примеры с

input type="text" и даты заполнены правильно. Так может кто-нибудь, пожалуйста, подскажите мне, каковы основы для этого преобразования, и пример того, как это должно быть сделано, был бы хорош.

Спасибо

2 ответа

Во-первых, вам не нужно использовать Calendar, Просто java.util.Date достаточно.

Таким образом, вы можете использовать загрузчик DatePicker для выбора даты на стороне клиента. Предположим, формат, который ожидает сборщик даты, mm/dd/yyyy, затем вы можете использовать объект выражения Thymeleaf для форматирования dateOfBirth как ${#dates.format(dateOfBirth, 'MM/dd/yyyy')}

Обратите внимание, что формат, используемый Thymeleaf, похож на формат, используемый SimpleDateFormat и тот, который используется Datepicker, можно найти в документации здесь

Когда вы используете элементы ввода типа date, значение даты всегда должно быть отформатировано как гггг-мм-дд. Отображаемый формат даты будет выбираться в зависимости от установленной локали браузера пользователя.

Попробуйте этот код:

  <input type="date" value="10/14/2016" class="form-control" id="dateOfBirth"
              th:value="${#calendars.format(dateOfBirth,'yyyy-MM-dd')}" th:name="dateOfBirth" />
Другие вопросы по тегам