«1. Обзор

Apache Tiles — это бесплатная структура шаблонов с открытым исходным кодом, полностью построенная на шаблоне проектирования Composite.

Составной шаблон проектирования — это тип структурного шаблона, который компонует объекты в древовидные структуры для представления иерархий целых частей, и этот шаблон обрабатывает отдельные объекты и композицию объектов единообразно. Другими словами, в плитках страница создается путем сборки композиции вложенных представлений, называемых плитками.

Преимущества этого фреймворка по сравнению с другими фреймворками включают в себя:

    возможность повторного использования, простота настройки, низкая производительность

В этой статье мы сосредоточимся на интеграции Apache Tiles со Spring MVC.

2. Конфигурация зависимостей

Первым шагом здесь является добавление необходимой зависимости в pom.xml:

<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-jsp</artifactId>
    <version>3.0.8</version>
</dependency>

3. Файлы макетов плиток

Теперь нам нужно определить определения шаблонов и конкретно в соответствии с каждой страницей мы перезапишем определения шаблона для этой конкретной страницы:

<tiles-definitions>
    <definition name="template-def" 
           template="/WEB-INF/views/tiles/layouts/defaultLayout.jsp">  
        <put-attribute name="title" value="" />  
        <put-attribute name="header" 
           value="/WEB-INF/views/tiles/templates/defaultHeader.jsp" />  
        <put-attribute name="menu" 
           value="/WEB-INF/views/tiles/templates/defaultMenu.jsp" />  
        <put-attribute name="body" value="" />  
        <put-attribute name="footer" 
           value="/WEB-INF/views/tiles/templates/defaultFooter.jsp" />  
    </definition>  
    <definition name="home" extends="template-def">  
        <put-attribute name="title" value="Welcome" />  
        <put-attribute name="body" 
           value="/WEB-INF/views/pages/home.jsp" />  
    </definition>  
</tiles-definitions>

4. ApplicationConfiguration и другие классы

В рамках настройки мы создадим три конкретных класса Java с именами ApplicationInitializer, ApplicationController и ApplicationConfiguration: ~~ ~ ApplicationInitializer инициализирует и проверяет необходимую конфигурацию, указанную в классах ApplicationConfiguration Класс ApplicationConfiguration содержит конфигурацию для интеграции Spring MVC с фреймворком Apache Tiles Класс ApplicationController работает синхронно с файломtiles.xml и перенаправляет на нужные страницы на основе входящих запросов

    Давайте посмотрим на каждый из классов в действии:

@Controller
@RequestMapping("/")
public class TilesController {
    @RequestMapping(
      value = { "/"}, 
      method = RequestMethod.GET)
    public String homePage(ModelMap model) {
        return "home";
    }
    @RequestMapping(
      value = { "/apachetiles"}, 
      method = RequestMethod.GET)
    public String productsPage(ModelMap model) {
        return "apachetiles";
    }
 
    @RequestMapping(
      value = { "/springmvc"},
      method = RequestMethod.GET)
    public String contactUsPage(ModelMap model) {
        return "springmvc";
    }
}
public class WebInitializer implements WebApplicationInitializer {
 public void onStartup(ServletContext container) throws ServletException {

        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        
        ctx.register(TilesApplicationConfiguration.class);

        container.addListener(new ContextLoaderListener(ctx));

        ServletRegistration.Dynamic servlet = container.addServlet(
          "dispatcher", new DispatcherServlet(ctx));
        servlet.setLoadOnStartup(1);
        servlet.addMapping("/");
    }
}

Есть два важных класса, которые играют ключевую роль в конфигурации. кольцевые плитки в приложении Spring MVC. Это TilesConfigurer и TilesViewResolver:

    TilesConfigurer помогает связать фреймворк Tiles с фреймворком Spring, предоставляя путь к файлу конфигурации тайлов TilesViewResolver — это один из классов адаптера, предоставляемых Spring API для разрешения представления тайлов

Наконец , в классе ApplicationConfiguration мы использовали классы TilesConfigurer и TilesViewResolver для достижения интеграции: плитки, используемые во всем приложении.

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.baeldung.spring.controller.tiles")
public class TilesApplicationConfiguration implements WebMvcConfigurer {
    @Bean
    public TilesConfigurer tilesConfigurer() {
        TilesConfigurer tilesConfigurer = new TilesConfigurer();
        tilesConfigurer.setDefinitions(
          new String[] { "/WEB-INF/views/**/tiles.xml" });
        tilesConfigurer.setCheckRefresh(true);
        
        return tilesConfigurer;
    }
    
    @Override
    public void configureViewResolvers(ViewResolverRegistry registry) {
        TilesViewResolver viewResolver = new TilesViewResolver();
        registry.viewResolver(viewResolver);
    }
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/static/**")
          .addResourceLocations("/static/");
    }
}

На этом шаге нам нужно создать определенные файлы шаблонов, которые были определены в файлеtiles.xml.

Пожалуйста, найдите фрагменты макетов, которые можно использовать в качестве основы для создания определенных страниц:

6. Заключение

На этом интеграция Spring MVC с Apache Tiles завершена.

<html>
    <head>
        <meta 
          http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title><tiles:getAsString name="title" /></title>
        <link href="<c:url value='/static/css/app.css' />" 
            rel="stylesheet">
        </link>
    </head>
    <body>
        <div class="flex-container">
            <tiles:insertAttribute name="header" />
            <tiles:insertAttribute name="menu" />
        <article class="article">
            <tiles:insertAttribute name="body" />
        </article>
        <tiles:insertAttribute name="footer" />
        </div>
    </body>
</html>

Вы можете найти полную реализацию в следующем проекте github.

«

You can find the full implementation in the following github project.