Вопрос по spring, java – Установить формат даты для ввода текста с помощью Spring MVC

7

Как я могу установить формат дляDate в текстовое поле с Spring MVC?

Я использую библиотеку тегов Spring Form иinput тег.

То, что я сейчас получаю, выглядит примерно такMon May 28 11:09:28 CEST 2012.

Я хочу показать дату вdd/MM/yyyy формат.

Ваш Ответ

3   ответа
8

зарегистрировать редактор даты в вашем контроллере:

@InitBinder
protected void initBinder(WebDataBinder binder) {
    binder.registerCustomEditor(LocalDate.class, new LocalDateEditor());
}

и тогда сам редактор данных может выглядеть так:

public class LocalDateEditor extends PropertyEditorSupport{

 @Override
 public void setAsText(String text) throws IllegalArgumentException{
   setValue(Joda.getLocalDateFromddMMMyyyy(text));
 }

 @Override
 public String getAsText() throws IllegalArgumentException {
   return Joda.getStringFromLocalDate((LocalDate) getValue());
 }
}

Я использую свой собственный абстрактный класс утилит (Joda) для разбора дат, на самом деле LocalDates изJoda Datetime библиотека - рекомендуется как стандартная дата / календарь java - мерзость, imho. Но вы должны понять. Кроме того, вы можете зарегистрировать глобальный редактор, так что вам не придется делать это на каждом контроллере (я не помню, как).

Error: User Rate Limit Exceeded davioooh
Error: User Rate Limit Exceededstatic.springsource.org/spring/docs/current/…Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded davioooh
Error: User Rate Limit Exceededstackoverflow.com/q/1268021/1061499Error: User Rate Limit Exceeded davioooh
8

Готово! Я просто добавил этот метод в свой класс контроллера:

@InitBinder
protected void initBinder(WebDataBinder binder) {
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
    binder.registerCustomEditor(Date.class, new CustomDateEditor(
            dateFormat, false));
}
7

Если вы хотите отформатировать все даты без необходимости повторять один и тот же код в каждом контроллере, вы можете создатьglobal InitBinder в классе с пометкой@ControllerAdvice аннотаций.

Steps

1. Создайте класс DateEditor, который будет форматировать ваши даты, например так:

    public class DateEditor extends PropertyEditorSupport {

    public void setAsText(String value) {
      try {
        setValue(new SimpleDateFormat("dd/MM/yyyy").parse(value));
      } catch(ParseException e) {
        setValue(null);
      }
    }

    public String getAsText() {
      String s = "";
      if (getValue() != null) {
         s = new SimpleDateFormat("dd/MM/yyyy").format((Date) getValue());
      }
      return s;
    }

2. Создайте класс с аннотацией @ControllerAdvice (я назвал его GlobalBindingInitializer):

    @ControllerAdvice
    public class GlobalBindingInitializer {

     /* Initialize a global InitBinder for dates instead of cloning its code in every Controller */

      @InitBinder
      public void binder(WebDataBinder binder) {
        binder.registerCustomEditor(Date.class, new DateEditor());
      }
    }

3. В вашем файле конфигурации Spring MVC (например, webmvc-config.xml) добавьте строки, которые позволяют Spring сканировать пакет, в котором вы создали класс GlobalBindingInitializer. Например, если вы создали GlobalBindingInitializer в пакете org.example.common:

    <context:component-scan base-package="org.example.common" />

Законченный!

Sources:

Похожие вопросы