2015-01-07 131 views
0

我想在我的项目中使用spring mvc 4.0.5包含dwr。项目中使用基于Java的配置。用于基于java的配置的 我在MVCConfiguration中使用以下几行代码。DWR Spring-MVC 4.0.5基于java的配置

@Bean 
    public DwrController dwrController(){ 
     Map<String,String> configParam = new HashMap<String, String>(); 
     configParam.put("activeReverseAjaxEnabled","true"); 

     DwrController dwrController = new DwrController(); 
     dwrController.setDebug(true); 
     dwrController.setConfigParams(configParam); 
/* 
     AnnotationsConfigurator annotationsConfigurator = new AnnotationsConfigurator(); 
     annotationsConfigurator.configure(); 
     dwrController.setConfigurators(configurators); 
*/ 
     List<Configurator> configurators = new ArrayList<Configurator>(); 
     configurators.add(annotationsConfigurator); 
     return dwrController; 
    } 
    @Bean 
    public BeanNameUrlHandlerMapping beanNameUrlHandlerMapping(){ 
     BeanNameUrlHandlerMapping beanNameUrlHandlerMapping = new BeanNameUrlHandlerMapping(); 
     return beanNameUrlHandlerMapping; 
    } 
    @Bean 
    public DwrHandlerMapping dwrHandlerMapping(){ 
     Map<String,String> urlMap = new HashMap<String, String>(); 
     urlMap.put("/dwr/**/*","dwrController"); 

     DwrHandlerMapping dwrHandlerMapping = new DwrHandlerMapping(); 
     dwrHandlerMapping.setAlwaysUseFullPath(true); 
     dwrHandlerMapping.setUrlMap(urlMap); 
     return dwrHandlerMapping; 
    } 

WebApplicationInitializer扩展类我已经为dwr请求添加了映射。

ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcher", new DispatcherServlet(dispatcherContext)); 
    dispatcher.setLoadOnStartup(1); 
    dispatcher.addMapping("/dwr/*"); 
    dispatcher.addMapping("/"); 

但是在部署时显示错误,指出“应该设置所需的配置器属性”。 你可以请建议如果配置需要任何修改也如何设置配置器。

改变dwrController()方法:

@Bean 
    @Autowired 
    public DwrController dwrController(BeanFactory beanFactory){ 
     Map<String,String> configParam = new HashMap<String, String>(); 
     configParam.put("activeReverseAjaxEnabled","true"); 

     DwrController dwrController = new DwrController(); 
     dwrController.setDebug(true); 
     dwrController.setConfigParams(configParam); 

     AnnotationsConfigurator annotationsConfigurator = new AnnotationsConfigurator(); 
     SpringContainer springContainer = new SpringContainer(); 
     springContainer.setBeanFactory(beanFactory); 
     annotationsConfigurator.configure(springContainer); 
     List<Configurator> configurators = new ArrayList<Configurator>(); 
     configurators.add(annotationsConfigurator); 
     dwrController.setConfigurators(configurators); 
     return dwrController; 
    } 

现在应用越来越被部署但/dwr/engine.js和其他请求是给错误The requested resource is not available

谢谢。

回答

0

我终于得到了有效的配置。这里是我cofiguration类的代码WebApplicationInitializer实现类

@Bean 
    public DwrController dwrController(ApplicationContext applicationContext){ 

     BeanDefinitionRegistry beanDefinitionRegistry = (BeanDefinitionRegistry)applicationContext.getAutowireCapableBeanFactory(); 
     Map<String,String> configParam = new HashMap<String, String>(); 
     configParam.put("activeReverseAjaxEnabled","true"); 

     ClassPathBeanDefinitionScanner scanner = new DwrClassPathBeanDefinitionScanner(beanDefinitionRegistry); 
     scanner.addIncludeFilter(new AnnotationTypeFilter(RemoteProxy.class)); 
     scanner.addIncludeFilter(new AnnotationTypeFilter(DataTransferObject.class)); 
     scanner.addIncludeFilter(new AnnotationTypeFilter(GlobalFilter.class)); 
     scanner.scan("package.to.scan"); 

     DwrController dwrController = new DwrController(); 
     dwrController.setDebug(true); 
     dwrController.setConfigParams(configParam); 

     SpringConfigurator springConfigurator = new SpringConfigurator(); 
     List<Configurator> configurators = new ArrayList<Configurator>(); 
     configurators.add(springConfigurator); 
     dwrController.setConfigurators(configurators); 


     return dwrController; 
    } 
    @Bean 
    public BeanNameUrlHandlerMapping beanNameUrlHandlerMapping(){ 
     BeanNameUrlHandlerMapping beanNameUrlHandlerMapping = new BeanNameUrlHandlerMapping(); 
     return beanNameUrlHandlerMapping; 
    } 
    @Bean 
    public DwrHandlerMapping dwrHandlerMapping(DwrController dwrController){ 
     Map<String,DwrController> urlMap = new HashMap<String, DwrController>(); 
     urlMap.put("/dwr/**/*",dwrController); 

     DwrHandlerMapping dwrHandlerMapping = new DwrHandlerMapping(); 
     dwrHandlerMapping.setAlwaysUseFullPath(true); 
     dwrHandlerMapping.setUrlMap(urlMap); 
     return dwrHandlerMapping; 
    } 

添加调度映射为

dispatcher.addMapping("/dwr/*"); 
dispatcher.addMapping("/"); 

注:DwrClassPathBeanDefinitionScanner将跳过@Controller,@Service,@Repository,@Component扫描,所以不要使用@RemoteProxy这些Spring注解中的任何一个一起。

0

您已创建列表,但尚未真正设置。添加以下行:

dwrController.setConfigurators(configurators); 

甚至更​​好......做这一切在单行

dwrController.setConfigurators(Arrays.asList(new AnnotationsConfigurator())); 
+0

谢谢你的回复。 是的,我知道,我有同样的评论线。但是annotationsConfigurator.configure();需要一个容器对象,我不知道如何创建它。 –

+0

好的让我试试 –

+0

lance我可以使用DwrSpringServlet类,当我在我的项目中使用spring MVC,似乎它也需要配置器被配置 –

相关问题