2016-01-26 21 views
5

Tôi đang sử dụng các mẫu Velocity cùng với khởi động Spring.ERROR org.apache.velocity: ResourceManager: không thể tìm thấy tài nguyên 'xxx.html.vm' trong bất kỳ trình tải tài nguyên nào

Khi có tệp có tên 'xxx.vm' trong thư mục mẫu, Spring Boot tải thành công 'xxx.vm'. Nhưng một thông báo L ERI dưới đây được ghi lại.

"ERROR org.apache.velocity: ResourceManager: không thể tìm thấy tài nguyên 'xxx.html.vm' trong bất kỳ trình tải tài nguyên nào."

Tôi không hiểu tại sao hệ thống tìm kiếm 'xxx.html.vm' vì hậu tố trong application.properties được thiết lập để ".vm"

Dưới đây là cấu hình trong application.properties

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

Không có vấn đề gì khi chạy ứng dụng của tôi, nhưng tôi muốn biết nguyên nhân gây ra thông báo Lỗi này. Bạn có thể giúp tôi giải quyết vấn đề này không? Cảm ơn bạn trước.

+0

bạn đã giải quyết vấn đề này? Tôi có cùng lỗi trên nhật ký của mình :-( –

Trả lời

3

Thêm dòng sau đây để application.properties:

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

Điều này thật kỳ lạ, trong trường hợp của tôi, tôi có hơn 30 lượt xem. Thật là đau đớn khi thêm tất cả các chế độ xem đó vào thuộc tính này và duy trì nó khi thêm hoặc xóa chế độ xem. rằng điều này là cần thiết để giải quyết vấn đề? –

1

Điều này xảy ra bởi vì khởi động mùa xuân cấu hình ViewResolvers khác nhau dựa trên những gì có sẵn trong classpath Nếu phụ thuộc vận tốc được tìm thấy trong classpath, sau đó mùa xuân sẽ cấu hình một VelocityViewResolver, nhưng cùng với nó cũng cấu hình các trình phân giải khung nhìn khác, ContentNegotiatingViewResolver là một trong số chúng.

ContentNegotiatingViewResolver cố khớp với tên chế độ xem và loại MIME để xác định chế độ xem tốt nhất có thể một cách tự động. Trong quá trình này, nó cố gắng tìm XXX.vm.html và do đó ném ngoại lệ.

Để khắc phục điều này, cấu hình chế độ xem của bạn sẽ giải quyết thủ công. Tham khảo: http://docs.spring.io/spring-boot/docs/current/reference/html/howto-spring-mvc.html#howto-switch-off-default-mvc-configuration

Tôi đã định cấu hình chế độ xemResolvers của mình theo cách thủ công bằng cách giới thiệu lớp sau và sự cố đã biến mất.

@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

Lý do @Sujit Kamthe cho biết chính xác là chính xác. Tôi hava lỗi tương tự và cố định nó bằng cách cấu hình "ContentNegotiationConfigurer" bằng tay trong lớp 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

Các vấn đề liên quan