Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Spring MVC


Автор: Slanix 8.8.2007, 15:05
Бьюсь уже целый день. В общем надо отобразить поле команды типа Date в определённом формате в <form:input>.
Подробнее:
  Есть
Код

public class myBean  {

  private Date firstDate;
  private Date lastDate;

  public void setFirstDate(Date date) {
      firstDate = date;
  }
  public Date getFirstDate() {
      return firstDate;
  }

  public void setLastDate(Date date) {
      lastDate = date
  }
  public Date getLastDate() {
      retirn lastDate;
  }

}

Есть форм-контроллер
в initBind зарегистрирован customEditor
Код

        SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_PATTERN,
                                                           Locale.US);
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, null,
                                    new CustomDateEditor(dateFormat, true));


Показать не проблема, проблема, что бы при этом продолжал работать BindError, который в случае неправильного формата введенной даты выдаем сообщение об ошибке и оставляет значение в input-е.

Автор: Tony 8.8.2007, 20:42
Код

    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {
        binder.registerCustomEditor(Date.class, "somedate" ,new CustomDateEditor(new SimpleDateFormat("dd-MM-yyyy"), false)); 
    }

Автор: Slanix 9.8.2007, 07:01
У меня это самое и есть. Но это применительно для биндинга пользовательской строки, которую он ввел на форме, на поле формбина. А мне необходимо, что бы на форме отображалась дата в нужном мне формате. Сейчас же она отображается в фомате MM-dd-yyyy hh:mm:ss

Автор: Tony 9.8.2007, 11:42
Тоесть как сделать лоад в правельном формате? А каким ты контролом выводишь дату?

Автор: Slanix 9.8.2007, 12:12
<form:input>

Я в принципе понял, что он использует то, что есть initBinder. Но если, я ушёл с этой формы (и соответствующий контроллер) на другую (там другой контроллер) и потом с той другой возвращаюсь на 1-ю, то initBinder для этой команды уже не срабатывает.

Автор: Tony 9.8.2007, 23:25
А ты пробывал добавить такойже биндер во 2 контоллер ? A 4то если свой контрол типа <d: property="eeeee"  format="dd-MM-yyyy" /> ? А вообще возмможно ли селать биндер для всех контроллерров (без копирования initBinder())?

Автор: Slanix 10.8.2007, 09:38
Там примерно так работает:
 - Для форм-контроллера есть форм-бин
 - В initBinder регистрируется CustomEditor для полей форм-бин с типом Date
 - это всё запихивается в BindException
 - и при показе формы она для тэга <form:input path="xxx"> и xxx смотрит в BindException и форматирует вывод с соответствии с лежащим там CustomEditor-ом 

    Таким образом, если я в mav положит мой бин и делаю форвард на jsp которая отображает этот бин, то в том контроллере из готорого я форвардю нет нужного мне CustomEditor , т.к. там был свой форм-бин.  smile 

Сорри если получилось запутанно.

Автор: Tony 10.8.2007, 12:57
А что если создать customBinder для всех бинов ? Посмотри ету ветку правда пока у меня не полу4илось.
http://www.tzavellas.com/techblog/2006/06/11/using-javautildate-values-in-spring-bean-definitions/

Автор: Slanix 13.8.2007, 13:03
Идея хорошая, но контроллеры могут быть разными (в которых нет initBinder-а).

Автор: Tony 13.8.2007, 22:40
А ты собмитишь фо4мочки в контроллерты не расширяющие CancellableFormController i SimpleFormController ?

Автор: Slanix 15.8.2007, 11:52
Tony, там все просто оказалось. Надо читать JavaDoc внимательнее.
http://www.springframework.org/docs/api/org/springframework/web/bind/ServletRequestDataBinder.html

В общем там всё понятно. Только конструктор использую
ServletRequestDataBinder(Object target, String objectName), где objectName - это commandName.

а то по дефолту у него "command".

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)