Какова цель связывания связывания в 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);
}