2013-09-28 80 views
0

我怎樣才能讓initBinder()法每次啓動窗體加載並提交。此示例有責任將日期從字符串轉換爲java.util.Date的WebBindingInitializer不會執行

在我的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註解到我的控制器,一切工作正常。這並不能滿足我,因爲我想在外部課堂上有這樣的感覺。

+0

你可以發佈接受包含日期的對象的控制器方法嗎? –

+1

一般來說,如果它的工作與否取決於你使用的是哪個版本的Spring。請添加版本。如果您使用的是較新版本的Spring,則應該使用'RequestMappingHandlerAdapter'而不是'AnnotationMethodHandlerAdapter'。 –

回答

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註冊了一些可能正在使用的處理程序來代替您的處理程序。

+0

沒有成功。在配置的開始,我把這個完全放在一邊。之後,我有靜態資源的mvc:資源標籤,磁貼配置,我的軟件包上的組件掃描,特定異常的SimpleMappingExceptionResolver和最後的ResourceBundleMessageSource。 – shx

0

您必須刪除或從您的調度員的servlet註釋掉<mvc:annotation-driven/>Documentation

0

類,AnnotationMethodHandlerAdapter,你用的是舊的和過時。你不應該使用它。

我假設你有<mvc:annotation-driven />@EnableWebMvc它記錄了推薦和支持的RequestMappingHandlerAdapter。您可以創建一個BeanPostProcessor以在RequestMappingHandlerAdapter上設置所需的屬性。

但是你真正應該做的是創建一個自定義轉換器和註冊,使用<mvc:annotation-driven />命名空間。這是推薦的做事方式,不再使用WebBindingInitializer