2016-01-26 6 views
5

Ich verwende Velocity-Vorlagen zusammen mit Spring Boot.FEHLER org.apache.velocity: ResourceManager: Ressource 'xxx.html.vm' kann in keinem Ressourcenlader gefunden werden

Wenn eine Datei namens 'xxx.vm' im Vorlagenverzeichnis vorhanden ist, lädt Spring Boot 'xxx.vm' erfolgreich. Aber eine Fehlermeldung unten wird protokolliert.

"FEHLER org.apache.velocity: ResourceManager: Ressource 'xxx.html.vm' kann in keinem Ressourcenlader gefunden werden."

Ich verstehe nicht, warum das System für 'xxx.html.vm' aussieht, weil das Suffix in den application.properties Hier

auf ".vm" gesetzt ist

Konfiguration in application.properties

ist
spring.velocity.enabled=true 
spring.velocity.resource-loader-path=classpath:/templates/ 
spring.velocity.suffix=.vm 

Es gibt kein Problem mit meiner Anwendung, , aber ich würde gerne wissen, was diese Fehlermeldung verursacht. Könnten Sie mir bitte helfen, damit umzugehen? Vielen Dank im Voraus.

+0

Haben lösen Sie das Problem? Ich habe den gleichen Fehler auf meinen Protokollen :-( –

Antwort

3

Fügen Sie die folgende Zeile zu application.properties:

spring.velocity.view-names=xxx,yyy,zzz 
+2

Das ist wirklich komisch, in meinem Fall habe ich mehr als 30 Ansichten. Ist wirklich schmerzhaft, alle diese Ansichten zu dieser Eigenschaft hinzufügen und pflegen, wenn Sie Ansichten hinzufügen oder entfernen. Sind Sie sicher dass dies nötig ist, um das Problem zu lösen? –

1

Dies geschieht, weil Frühjahr Boot auf verschiedene ViewResolvers Basis konfiguriert, was in Classpath verfügbar ist Wenn Geschwindigkeitsabhängigkeit in Classpath gefunden wird, dann würde Feder eine VelocityViewResolver konfigurieren, aber zusammen mit diesem konfiguriert es auch andere Ansichtsresolver, ContentNegoiatingViewResolver ist einer von ihnen.

ContentNegoatingViewResolver versucht, den Ansichtsnamen und MIME-Typ zu vergleichen, um die bestmögliche Ansicht automatisch zu bestimmen. In diesem Prozess versucht es, die XXX.vm.html zu finden und löst daher die Ausnahme aus.

Um dies zu beheben, konfigurieren Sie Ihre View Resolver manuell. Siehe: http://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-switch-off-default-mvc-configuration

Ich habe meine ViewResolver manuell durch Einführung der folgenden Klasse konfiguriert, und das Problem verschwand.

@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

Der Grund @Sujit Kamthe sagte genau richtig. Ich habe den gleichen Fehler und habe ihn behoben, indem ich "ContentNegotiationConfigurer" manuell in der WebConfig-Klasse konfiguriert habe.

@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