DWR Spring-MVC 4.0.5基于java的配置

时间:2015-01-07 10:51:03

标签: java spring spring-mvc dwr

我正在尝试将dwr包含在使用spring mvc 4.0.5的项目中。基于Java的配置在项目中使用。 对于基于java的配置我在MVCConfiguration中使用以下代码行。

@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扩展类i已为dwr请求添加了映射。

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

但在部署时,它会显示错误说明&#34;所需的配置程序&#39;财产应该设置&#34;。 您能否建议配置是否需要进行任何修改以及如何设置配置器。

将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

感谢。

2 个答案:

答案 0 :(得分:1)

我终于得到了工作配置。这是我的cofiguration类的代码

    @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;
    }

在实现类

的WebApplicationInitializer中添加了调度程序映射
dispatcher.addMapping("/dwr/*");
dispatcher.addMapping("/");

注意:DwrClassPathBeanDefinitionScanner将跳过@Controller,@Service,@Repository,@Component的扫描,因此请勿使用@RemoteProxy以及这些弹簧注释中的任何一个。

答案 1 :(得分:0)

您已创建了该列表但尚未实际设置该列表。添加以下行:

dwrController.setConfigurators(configurators);

甚至更好......在一行中完成所有工作

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