Programming > Spring Framework

Spring Framework 에 tiles 적용하기

Tiles 라이브러리 추가

프로젝트의 pom.xml에 라이브러리를 추가한다.

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

Spring 설정

Tiles와 Spring Controller을 연결하기 위해 Tiles를 위한 ViewResolver을 추가한다.

@Configuration
@EnableWebMvc
@Import({ DataBaseConfig.class })
@ComponentScan({ " com.emunhi.web.controller", " com.emunhi.service", " com.emunhi.init.comp" })
@MapperScan("com.emunhi.web.mapper")
@PropertySource("classpath:config/properties/${spring.profiles.active}/application.properties")
public class WebConfig extends WebMvcConfigurerAdapter {

    @Bean
    public BeanNameViewResolver beanNameViewResolver() {
        BeanNameViewResolver resolver = new BeanNameViewResolver();
        resolver.setOrder(0);
        return resolver;
    }

    @Bean
    public UrlBasedViewResolver urlBasedViewResolver() {
        UrlBasedViewResolver resolver = new UrlBasedViewResolver();
        /**
         * 아래의 JstlView 의 View Resolver보다 Order을 높게 설정한다.
         */
        resolver.setViewClass(TilesView.class);
        resolver.setOrder(1);
        return resolver;
    }

    @Bean
    public InternalResourceViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/jsp/");
        resolver.setSuffix(".jsp");
        resolver.setViewClass(JstlView.class);
        resolver.setOrder(2);
        return resolver;
    }

    /**
     * Tiles 정의파일 설정
     */
    @Bean
    public TilesConfigurer tilesConfigurer() {
        TilesConfigurer tilesConfigurer = new TilesConfigurer();
        tilesConfigurer.setDefinitions(new String[] { "/WEB-INF/config/tiles/tiles.xml" });
        tilesConfigurer.setCheckRefresh(true);
        return tilesConfigurer;
    }

Tiles정의 (위 설정위치에 지정한 파일)

/WEB-INF/config/tiles/tiles.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN" "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>

       <definition name="base/default" template="/WEB-INF/config/layout/layout.jsp">
             <put-attribute name="header" value="/WEB-INF/config/layout/header.jsp" />
             <put-attribute name="left" value="/WEB-INF/config/layout/left.jsp" />
             <put-attribute name="right" value="/WEB-INF/config/layout/right.jsp" />
             <put-attribute name="footer" value="/WEB-INF/config/layout/footer.jsp" />
             <put-attribute name="contents" value="" />
       </definition>

       <definition name="contents/*.tiles" extends="base/default">
             <put-attribute name="contents" value="/WEB-INF/jsp/contents/{1}.jsp" />
       </definition>
       <definition name="contents/*/*.tiles" extends="base/default">
             <put-attribute name="contents" value="/WEB-INF/jsp/contents/{1}/{2}.jsp" />
       </definition>
       <definition name="contents/*/*/*.tiles" extends="base/default">
             <put-attribute name="contents" value="/WEB-INF/jsp/contents/{1}/{2}/{3}.jsp" />
       </definition>
       <definition name="contents/*/*/*/*.tiles" extends="base/default">
             <put-attribute name="contents" value="/WEB-INF/jsp/contents/{1}/{2}/{3}/{4}.jsp" />
       </definition>
      
</tiles-definitions>

Template 파일정의

</head>
<body>
       <div>

             <div id="id_header">
                    <tiles:insertAttribute name="header" />
             </div>

             <div id="id_main">
                    <div id="id_cont">
                           <tiles:insertAttribute name="contents" />
                    </div>
             </div>

             <div id="id_left">
                    <div>
                           <tiles:insertAttribute name="left" />
                    </div>
             </div>

             <div id="id_right">
                    <div>
                           <tiles:insertAttribute name="right" />
                    </div>
             </div>

             <div id="id_footer">
                    <tiles:insertAttribute name="footer" />
             </div>

       </div>

</body>
</html>