Какова цель связывания связывания в spring MVC
Это код в интернете для init binder
@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 пытается против всех зарегистрированных редакторов видеть, могут ли значения быть преобразованы в объекты. Вам не нужно ничего делать в самом объекте, что его красота.
Ответ 2
Spring автоматически связывает простые данные (строки, int, float и т.д.) в свойства вашей команды bean. Однако, что происходит, когда данные более сложны, например, что происходит, когда вы хотите захватить строку в формате "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);
}