Подтвердить что ты не робот

Как я могу зарегистрировать глобальный настраиваемый редактор в Spring -MVC?

Я использую следующий настраиваемый редактор в MANY Spring -MVC-контроллерах в соответствии с:

Контроллер

binder.registerCustomEditor(BigDecimal.class, new CustomNumberEditor(BigDecimal.class, NumberFormat.getNumberInstance(new Locale("pt", "BR"), true));

Другой контроллер

binder.registerCustomEditor(BigDecimal.class, new CustomNumberEditor(BigDecimal.class, NumberFormat.getNumberInstance(new Locale("pt", "BR"), true));

Другой контроллер

binder.registerCustomEditor(BigDecimal.class, new CustomNumberEditor(BigDecimal.class, NumberFormat.getNumberInstance(new Locale("pt", "BR"), true));

Обратите внимание, что зарегистрированный пользовательский редактор зарегистрирован

Вопрос: как я могу настроить глобальный настраиваемый редактор, подобный этому, чтобы избежать настройки каждого контроллера?

С уважением,

4b9b3361

Ответ 1

Вам нужно объявить его в контексте приложения:

<bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
  <property name="customEditors"><map>
    <entry key="java.math.BigDecimal">
      <bean class="org.springframework.beans.propertyeditors.CustomNumberEditor">
      ... <!-- specify constructor-args here -->
      </bean>
    </entry>
  </map></property>
</bean>

Подробности здесь

Ответ 2

Запустив Spring 3.2, вы можете использовать @ControllerAdvice вместо использования @ExceptionHandler, @InitBinder и @ModelAttribute в каждом контроллере. Они будут применены ко всем @Controller beans.

import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.context.request.WebRequest;

@ControllerAdvice
public class GlobalBindingInitializer {
  @InitBinder
  public void registerCustomEditors(WebDataBinder binder, WebRequest request) {
    binder.registerCustomEditor(BigDecimal.class, new  CustomNumberEditor(BigDecimal.class, NumberFormat.getNumberInstance(new Locale("pt", "BR"), true));
  }
}

Если вы начали с Spring созданного Roo кода или ограничили аннотации, отсканированные с помощью компонента-проверки, используя include-filter, затем добавьте необходимый фильтр в webmvc-config.xml

<!-- The controllers are autodetected POJOs labeled with the @Controller annotation. -->
<context:component-scan base-package="com.sensei.encore.maininterface" use-default-filters="false">
  <context:include-filter expression="org.springframework.stereotype.Controller" type="annotation"/>
  <!-- ADD THE BELOW LINE -->
  <context:include-filter expression="org.springframework.web.bind.annotation.ControllerAdvice" type="annotation"/>
</context:component-scan>

Ответ 3

Если вы используете контроллер на основе аннотаций (Spring 2.5+), вы можете использовать WebBindingInitializer для регистрации глобальных редакторов свойств. Что-то вроде

public class GlobalBindingInitializer implements WebBindingInitializer {

    public void initBinder(WebDataBinder binder, WebRequest request) {
        binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("dd/MM/yyyy"), true));
    }

}

Итак, в вашем файле контекста веб-приложения объявите

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    <property name="webBindingInitializer">
        <bean class="GlobalBindingInitializer"/>
    </property>
</bean>

Таким образом, все контроллеры на основе аннотаций могут использовать любой редактор свойств, объявленный в GlobalBindingInitializer.