2016-01-26 9 views
5

Używam szablonów Velocity wraz z Spring boot.ERROR org.apache.velocity: ResourceManager: nie można znaleźć zasobu "xxx.html.vm" w dowolnym ładowarce zasobów

Gdy istnieje plik o nazwie "xxx.vm" w katalogu szablonów, Spring Boot pomyślnie ładuje "xxx.vm". Ale zalogowany poniżej jest komunikat o błędzie poniżej.

"ERROR org.apache.velocity: ResourceManager: nie można znaleźć zasobu" xxx.html.vm "w dowolnym module ładującym zasoby."

Nie rozumiem dlaczego system szuka „xxx.html.vm” ponieważ przyrostek w application.properties jest ustawiony na „.vm”

Oto konfiguracja w application.properties

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

Nie ma problemu z uruchomieniem aplikacji, , ale chciałbym wiedzieć, co powoduje ten komunikat o błędzie. Czy możesz mi pomóc rozwiązać ten problem? Z góry dziękuję.

+0

Czy można rozwiązać ten problem? Mam taki sam błąd w dziennikach :-( –

Odpowiedz

3

Dodaj następujący wiersz do application.properties:

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

To jest naprawdę dziwne, w moim przypadku mam więcej niż 30 wyświetleń. Naprawdę bolesne jest dodanie wszystkich widoków do tej właściwości i zachowanie jej podczas dodawania lub usuwania widoków. że jest to potrzebne do rozwiązania problemu? –

1

Dzieje się tak dlatego bagażnika sprężyna konfiguruje różne ViewResolvers w oparciu o to, co jest dostępne w ścieżce klasy Jeżeli zależność prędkości znajduje się w ścieżce klasy, potem wiosna by skonfigurować VelocityViewResolver, ale wraz z tym konfiguruje również inne narzędzia do sprawdzania widoku, a jednym z nich jest ContentNegotiatingViewResolver.

ContentNegotiatingViewResolver próbuje dopasować nazwę widoku i typ MIME, aby automatycznie określić najlepszy możliwy widok. W tym procesie próbuje znaleźć plik XXX.vm.html, a tym samym zgłasza wyjątek.

Aby rozwiązać ten problem, należy skonfigurować konfigurację widoku ręcznie. Patrz: http://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-switch-off-default-mvc-configuration

Skonfigurowałem ręcznie viewResolvers, wprowadzając poniższą klasę i problem zniknął.

@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

Powód @Sujit Kamthe powiedział dokładnie poprawne. Mam ten sam błąd i naprawiłem go, ręcznie konfigurując "ContentNegotiationConfigurer" w klasie WebConfig.

@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

Powiązane problemy