当前位置: 首页 > 知识库问答 >
问题:

DWRSpring-基于MVC 4.0.5 java的配置

陶刚豪
2023-03-14

我正在尝试将dwr包含在使用SpringMVC4.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;
    }

扩展类I的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和它给出的其他请求错误<code>请求的资源不可用。

谢谢。

共有2个答案

卢晟
2023-03-14

您已经创建了列表,但还没有实际设置它。添加以下一行:

dwrController.setConfigurators(configurators);

或者更好...在一行中完成所有操作

dwrController.setConfigurators(Arrays.asList(new AnnotationsConfigurator()));
古畅
2023-03-14

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

    @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映射,实现类为

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

注意:DrowClassPathBeanDefitionScanner将跳过对@Controller、@Service、@Repository、@Component的扫描,因此不要使用@RemoteProxy以及这些Spring注释中的任何一个。

 类似资料:
  • 问题内容: 我尝试不使用任何xml。 像这样一个:转换为@Bean 问题在这里。 尝试将“ com.cloudlb.domain.User”转换为Class []无效。 错误:投放问题。 先感谢您。 问题答案:

  • 问题内容: 是否可以在应用程序中同时具有MyBatis的基于XML +注释的配置。 我之所以这样问,是因为在我的应用程序中,我使用的是基于注释的方法。但是在一种情况下,我需要使用IN子句,可以使用 基于XML的配置。 但是,当我启动应用程序时,它似乎无法识别基于注释的映射器,并给了我一个例外。 因此,我想知道是否可以在应用程序中同时具有MyBatis的基于XML + Annotation的配置。请

  • Spring Data Elasticsearch repository可以通过XML配置,也可以通过JavaConfig的注解配置。 Example 35. Spring Data Elasticsearch repositories using JavaConfig(使用JavaConfig) @Configuration @EnableElasticsearchRepositories(ba

  • 问题内容: 在最近我从事的一些大型项目中,选择其中一种(XML或注释)似乎变得越来越重要。随着项目的发展,一致性对于可维护性非常重要。 我的问题是:与基于注释的配置相比,基于XML的配置有哪些优势?与基于XML的配置相比,基于注释的配置有哪些优势? 问题答案: 注释有其用途,但它们不是杀死XML配置的灵丹妙药。我建议将两者混合! 例如,如果使用Spring,则将XML用于应用程序的依赖注入部分是完

  • 当我使用Spring framework时,我经常看到2个术语基于Java和基于注释的配置/自动生成。 如果它们不一样,你能告诉我它们之间有什么不同吗?

  • 我最近的目标是构建一个Spring Boot应用程序,但不需要任何XML配置文件(或尽可能少),因此我希望避免使用一些XML文件(即web.XML),特别是对于一些bean定义部分。 更难的部分来了。 我想使用@AutoWired注释将一个SessionFactory bean注入到类中,但每次尝试启动应用程序时,我都得到: unsatisfiedDependencyException:创建名为“