1. 概要

Apache Titles は、純粋にコンポジットデザインパターンに基づいて構築された無料のオープンソーステンプレートフレームワークです。

複合デザインパターンは、オブジェクトをツリー構造に構成してパーツ全体の階層を表す構造パターンの一種であり、このパターンは個々のオブジェクトとオブジェクトの構成を均一に扱います。 つまり、タイルでは、タイルと呼ばれるサブビューの構成を組み立てることによってページが作成されます。

他のフレームワークに対するこのフレームワークの利点は次のとおりです。

  • 再利用性
  • 設定が簡単
  • 低パフォーマンスのオーバーヘッド

この記事では、ApacheタイルとSpringMVCの統合に焦点を当てます。

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およびその他のクラス

構成の一部として、 ApplicationInitializer ApplicationController 、およびApplicationConfigurationという3つの特定のJavaクラスを作成します。

  • ApplicationInitializer は、ApplicationConfigurationクラスで指定された必要な構成を初期化してチェックします
  • ApplicationConfiguration クラスには、SpringMVCをApacheTilesフレームワークと統合するための構成が含まれています
  • 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("/");
    }
}

SpringMVCアプリケーションでタイルを構成する際に重要な役割を果たす2つの重要なクラスがあります。 それらはTilesConfigurerTilesViewResolverです。

  • TilesConfigurer は、タイル構成ファイルへのパスを提供することにより、TilesフレームワークをSpringフレームワークにリンクするのに役立ちます
  • TilesViewResolver は、タイルビューを解決するためにSpringAPIによって提供されるアダプタークラスの1つです。

最後に、 ApplicationConfiguration クラスでは、TitlesConfigurerクラスと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/");
    }
}

5. タイルテンプレートファイル

これまで、Apache Tilesフレームワークの構成と、アプリケーション全体で使用されるテンプレートと特定のタイルの定義を完了しました。

このステップでは、tiles.xmlで定義されている特定のテンプレートファイルを作成する必要があります。

特定のページを作成するためのベースとして使用できるレイアウトのスニペットを見つけてください。

<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>

6. 結論

これで、SpringMVCとApacheTilesの統合は完了です。

完全な実装は、次のgithubプロジェクトにあります。