Просматривать объекты календаря в формах тимелина как типы дат
У меня есть объект пользователя, и у пользователя есть поле 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" />