Apache tiles view

스프링 MVC는 Apache tiles 를 논리적 뷰 이름으로 타일을 정의할 수 있는 뷰 리졸버를 통해 지원한다.

 

Composite View 패턴

모듈 단위의 뷰 들을 조합해서 하나의 뷰를 구성한다. 트리 구조로 볼 수 있으며, 부모 뷰와 자식 뷰 들의 사이를 부모를 하나의 전체 뷰로 볼 수 있고, 자식 뷰를 작은 한 부분으로 볼 수 있다. 아래는 Composite 패턴의 UML이다.

Component는 표현할 요소들의 추상적인 인터페이스고, Leaf는 Component의 구현체, Composite은 Component의 구현체들을 자식으로 삼으며, 구현체(Leaf)를 관리하기 위한 메소드들이 추가적으로 있다.

즉 Composite View 패턴을 사용해서 화면이 바뀌어도 중복되는 부분(상단, 하단 등)의 코드를 줄일 수 있고, 일관성을 높여 유지보수와 제어를 쉽게한다.

 

XML 설정

스프링에서 타일을 사용하기 위해서 빈을 설정해 주어야 한다.

 

TilesConfigurer : 빈은 타일 정의의 위치를 정하고, 불러오고, 일반적으로 타일들을 배치해 주는 역할을 한다.

TilesViewResolver : 빈은 논리적 뷰 이름으로 타일 정의를 결정한다.

 

pom.xml

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

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

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

 

servlet-context.xml

<!-- Tiles viewResolver -->
<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
    <property name="order" value="2" />
</bean>

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    <property name="definitions">
        <list>
             <value>/WEB-INF/tiles/*.xml</value>
        </list>
    </property>
</bean>

 

 

/WEB-INF/tiles/tiles-default.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="defaultLayout" template="/WEB-INF/views/layouts/layout.jsp">
        <put-attribute name="header" value="/WEB-INF/views/layouts/header.jsp" />
        <put-attribute name="menu" value="/WEB-INF/views/layouts/menu.jsp" />
        <put-attribute name="main" />
        <put-attribute name="footer" value="/WEB-INF/views/layouts/footer.jsp" />
    </definition>

    <definition name="/tilesTest" extends="defaultLayout">
        <put-attribute name="main" value="타일즈 메인입니다" />
    </definition>

    <definition name="/*" extends="defaultLayout">
        <put-attribute name="main" value="/WEB-INF/views/{1}.jsp" />
    </definition>
    
    <!--
    <definition name="/*/*" extends="defaultLayout">
        <put-attribute name="main" value="/WEB-INF/views/{1}/{2}.jsp" />
    </definition>
    -->
</tiles-definitions>

용어

Template는 페이지의 구조를 기술하고 Attribute는 구조내에서 실제 내용에 해당하며, definition은 Template(구조)에 Attribute(내용)을 연결하여 랜더링가능한 페이지를 기술한다. 자세히 살펴보면..

 

  • Template : 페이지 레이아웃을 의미하며, jsp 파일로 페이지의 기본 골격을 구성하고 각 페이지의 실제 구성 내용은 definition에서 설정되는 Attribute(실제 내용) 태그를 사용하여 런타임 시 뿌려준다.
    • string 타입 Attribute 추가: <titles:getAsString name="속성명"/>
    • template 및 definition Attribute 추가: <tiles:insertAttribute name="속성명" />
  • Attribute : Template의 빈 공간을 채우기 위하여 사용되는 정보로 3가지 타입으로 구성
    • string: 직접 출력 할 문자열. ex. title
    • template : 템플릿 내 또 일부의 레이아웃을 기술할 수도 있다.
    • definition : 전체 혹은 일부 Attribute 들이 실제 내용으로 채워진 페이지, 페이지 구조(Template)와 레이아웃 내부를 채울 정보(Attribute)가 같이 정의된 페이지를 의미
  • Definition : 사용자에게 제공되기 위하여 랜더링되는 Template과 Attribute들을 연결

 

 

복사했습니다!