Какова цель 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);
}
Другие вопросы по тегам