0

如何initBinder()在每次表单加载和提交时启动方法。此示例负责将日期从 String 转换为java.util.Date.

在我的 servlet-context.xml 中:

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

这是我的 WebBindingInitializer 实现:

public class ExampleBindingInitializer implements WebBindingInitializer {

    private ExampleService exampleService;

    @Autowired
    public ExampleBindingInitializer(ReservationService reservationService) {
        this.reservationService = reservationService;
    }

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

我没有在调用 ExampleService 方法的控制器中进行任何修改。我哪里错了?

当我将initBinder()带有@InitBinder注释的方法放入控制器时,一切正常。这不满足我,因为我想在外部课堂上拥有它。

4

3 回答 3

1

确保您已<mvc:annotation-driven/>包含在您的配置中,并且在它之前声明了您的 bean。

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

<mvc:annotation-driven/>

当 Spring 扫描处理程序时,将使用第一个注册的处理程序。 mvc:annotation-driven注册一些可能用于代替您的处理程序的处理程序。

于 2013-09-28T22:21:51.577 回答
0

<mvc:annotation-driven/>您必须从 dispatcher-servlet中删除或注释掉。文档

于 2014-11-13T08:26:37.343 回答
0

您使用的类 ,AnnotationMethodHandlerAdapter已过时且已弃用。你不应该使用它。

我假设您已经注册了推荐<mvc:annotation-driven />@EnableWebMvc支持的RequestMappingHandlerAdapter. 您可以创建一个BeanPostProcessor来设置所需的属性RequestMappingHandlerAdapter

但是,您实际上应该做的是创建一个自定义转换器并使用<mvc:annotation-driven />命名空间注册它。这是推荐的做事方式,不再使用 a WebBindingInitializer

于 2016-08-22T09:28:44.847 回答