我正在尝试将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
。
感谢。
答案 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()));