2016-03-11 3 views
0

MyController.java:ERROR [org.apache.velocity] ResourceManager: не удалось найти ресурс 'layout.vm' в любом загрузчиком ресурсов

@Controller 
public class ForemanController { 

    @RequestMapping({"/index", "/"}) 
    public ModelAndView home(Model model){ 

     Map<String, String> map = new HashMap<String, String>(); 
     // .. fill map 
     return new ModelAndView("index", "map", map); 
    } 
} 

ServletInitializer.java:

public class ServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class<?>[0]; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return new Class<?>[]{AppConfig.class}; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     return new String[]{"/"}; 
    } 
} 

AppConfig. Java:

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = {"com.my"}) 
public class AppConfig { 

    @Bean 
    public VelocityConfigurer velocityConfig(){ 
     VelocityConfigurer velocityConfig = new VelocityConfigurer(); 
     velocityConfig.setResourceLoaderPath("/"); 
     return velocityConfig; 
    } 

    @Bean 
    public VelocityLayoutViewResolver viewResolver(){ 
     VelocityLayoutViewResolver viewResolver = new VelocityLayoutViewResolver(); 
     viewResolver.setCache(true); 
     viewResolver.setPrefix("/WEB-INF/views/"); 
     viewResolver.setSuffix(".vm"); 
     return viewResolver; 
    } 

} 

index.vm под WEB-INF/просмотров:

<!DOCTYPE HTML> 
<html> 
<head> 
    <title>foreman</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
</head> 
<body> 
    hello world! 
</body> 
</html> 

развернуть в Wildfly, развертывание успешно, нажмите на домашнюю страницу с «локальный: 8080/MyApp», и я получаю Internal Server Error:

2016-03-11 01:48:58,844 ERROR [org.apache.velocity] (default task-11) ResourceManager : unable to find resource 'layout.vm' in any resource loader. 

Я не вижу никакого упоминания о «макете» где-нибудь в моем проекте. Откуда это?

ответ

0

Это поведение по умолчанию VelocityLayoutViewResolver в вашем компоненте viewResolver для поиска шаблона layout.vm. Ожидается, что

layout.vm будет служить рамкой или оберткой вокруг представлений, определенных вашим контроллером. Это очень удобно, потому что вам не нужно беспокоиться о том, как особый вид и общая HTML-страница объединяются.

См. Это, например, это tutorial (начало в разделе «Создание шаблонов») и это question для деталей.

+0

спасибо, что я хочу, чтобы важные соглашения стали более ясными в официальных документах. Я не вижу, что layout.vm явно определен как таковой в любом случае на сайте скорости. – user1561108

+1

Небольшое недоразумение здесь - это не оригинальная скорость, а весна. Вот документ [doc] (http://docs.spring.io/spring-framework/docs/2.0.x/api/org/springframework/web/servlet/view/velocity/VelocityLayoutViewResolver.html). – MyBrainHurts