Какова цель init binder весной MVC
Это код в Интернете для инициатора связывания
@InitBinder
public void initBinder(WebDataBinder binder) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
Может кто-нибудь объяснить, пожалуйста:
1) Почему это используется, я имею в виду, в чем была проблема раньше, как она была решена с помощью этой функции. поэтому я хочу знать, что было проблемой с оригинальной датой, которая была решена с этим форматом даты?
2) Как использовать этот формат с точки зрения формы JSP, я имею в виду, если мы вводим дату в текстовом формате, она преобразуется в определенный формат и затем сохраняет ее?
3) Как применяется это форматирование, я имею в виду, нужно ли что-то делать в классе объектов?
1 ответ
1) Раньше приходилось прибегать к ручному разбору даты:
public void webmethod(@RequestParam("date") String strDate) {
Date date = ... // manually parse the date
}
Теперь вы можете получить проанализированную дату напрямую:
public void webmethod(@RequestParam("date") Date date) {
}
2) Если ваш jsp
страница предоставляет дату в форме yyyy-MM-dd
вы можете получить его как Date
Объект прямо в вашем контроллере.
3) Spring пытается против всех зарегистрированных редакторов посмотреть, можно ли преобразовать значения в объекты. Вам не нужно ничего делать в самом объекте, в этом его прелесть.
Spring автоматически связывает простые данные (Strings, int, float и т. Д.) Со свойствами вашего командного компонента. Однако, что происходит, когда данные более сложны, например, что происходит, когда вы хотите захватить строку в формате "20 января 1990 года" и заставить Spring создать из нее объект Date как часть операции привязки. Для этой работы вам необходимо сообщить Spring Web MVC, чтобы использовать экземпляры PropertyEditor как часть процесса привязки:
@InitBinder
public void bindingPreparation(WebDataBinder binder) {
DateFormat dateFormat = new SimpleDateFormat("MMM d, YYYY");
CustomDateEditor orderDateEditor = new CustomDateEditor(dateFormat, true);
binder.registerCustomEditor(Date.class, orderDateEditor);
}