2016-01-26 27 views
5

Yay şablonları ile birlikte Velocity şablonları kullanıyorum.HATA org.apache.velocity: ResourceManager: 'xxx.html.vm' kaynağını herhangi bir kaynak yükleyicide bulamıyor

Şablon dizisinde 'xxx.vm' adında bir dosya varsa, Spring Boot başarıyla 'xxx.vm' yükler. Ancak aşağıdaki ERROR mesajı kaydedilir.

"ERROR org.apache.velocity: ResourceManager: herhangi bir kaynak yükleyicide 'xxx.html.vm' kaynağını bulamıyor."

sistem application.properties içinde eki ayarlandığı için 'xxx.html.vm' arar neden ".vm" için Buraya

application.properties

yapılandırma olduğunu anlamıyorum
spring.velocity.enabled=true 
spring.velocity.resource-loader-path=classpath:/templates/ 
spring.velocity.suffix=.vm 

Uygulamamın çalıştırılmasıyla ilgili bir sorunum yok, Ancak, bu hata iletisinin nedenini öğrenmek istiyorum. Bu konuda bana yardımcı olabilir misiniz? Şimdiden teşekkür ederim.

+0

sorunu çözdü mü? Günlüklerimde de aynı hatayı alıyorum :-( –

cevap

3

application.properties için aşağıdaki satırı ekleyin:

bahar çizme hız bağımlılık sınıf yolunda bulunursa sınıf yolunda mevcuttur dayalı çeşitli ViewResolvers yapılandırır Bunun nedeni
spring.velocity.view-names=xxx,yyy,zzz 
+2

Bu gerçekten garip, benim durumumda 30'dan fazla görüntü var. Bu özelliklere tüm bu görünümleri eklemek ve görünüm eklerken veya çıkarırken bunu korumak gerçekten acı verici. Bu sorunu çözmek için gerekli olduğunu? –

1

ardından bahar bir VelocityViewResolver yapılandırmak, ancak Bununla birlikte diğer görünüm çözücüleri de yapılandırır, ContentNegotiatingViewResolver bunlardan biri olur.

ContentNegotiatingViewResolver, otomatik olarak mümkün olan en iyi görünümü belirlemek için görünüm adını ve MIME türünü eşleştirmeyi dener. Bu süreçte, XXX.vm.html dosyasını bulmaya çalışır ve böylece istisnayı atar.

Bunu düzeltmek için görünüm çözücülerinizi el ile yapılandırın. Bakınız: http://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-switch-off-default-mvc-configuration

Görüntüleme sınıflarımı, aşağıdaki sınıfı tanıtarak el ile yapılandırdım ve sorun ortadan kalktı.

@Configuration 
@EnableWebMvc 
public class MvcConfiguration extends WebMvcConfigurerAdapter{ 
@Autowired 
private final ResourceLoader resourceLoader = new DefaultResourceLoader(); 

@Bean 
public VelocityConfig velocityConfig() { 
    VelocityConfigurer cfg = new VelocityConfigurer(); 
    cfg.setResourceLoader(resourceLoader); 
    cfg.setResourceLoaderPath("classpath:/templates/") 
    return cfg; 
} 

@Bean 
public ViewResolver viewResolver() { 
    VelocityViewResolver resolver = new VelocityViewResolver(); 
    resolver.setViewClass(VelocityToolboxView.class); 
    resolver.setPrefix(""); 
    resolver.setSuffix(".vm"); 
    return resolver; 
} 

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    final String[] CLASSPATH_RESOURCE_LOCATIONS = [ 
     "classpath:/META-INF/resources/", "classpath:/resources/", 
     "classpath:/static/", "classpath:/public/" ]; 
     registry.addResourceHandler("/**").addResourceLocations(
       CLASSPATH_RESOURCE_LOCATIONS); 
} 
} 
0

@Sujit Kamthe'ın nedeni tam olarak doğrudur. Aynı hatayı alıyorum ve WebConfig sınıfında "ContentNegotiationConfigurer" öğesini el ile yapılandırarak düzeltdim.

@Configuration 
public class WebConfig extends WebMvcConfigurerAdapter { 

    @Override 
    public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { 
     configurer.favorPathExtension(false). 
      favorParameter(false). 
      ignoreAcceptHeader(false). 
      useJaf(false). 
      defaultContentType(MediaType.TEXT_HTML). 
      mediaType("json", MediaType.APPLICATION_JSON); 
    } 
} 

Refer:https://spring.io/blog/2013/05/11/content-negotiation-using-spring-mvc