Frameworks/Tiles framework

Tiles framework 기본 구성

원2 2021. 12. 20. 17:42
728x90
반응형

Spring 프로젝트 임.

 

1. pom.xml에 maven 의존성을 추가 해준다.

 

        <!--   tiles 버전 명시     -->
        <org.apache.tiles-version>3.0.8</org.apache.tiles-version>
 <!-- Tiles Framework 관련 version 은 위에 명시해둠 -->
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-servlet</artifactId>
            <version>${org.apache.tiles-version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-api</artifactId>
            <version>${org.apache.tiles-version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-jsp</artifactId>
            <version>${org.apache.tiles-version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-core</artifactId>
            <version>${org.apache.tiles-version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-template</artifactId>
            <version>${org.apache.tiles-version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.tiles</groupId>
            <artifactId>tiles-extras</artifactId>
            <version>${org.apache.tiles-version}</version>
        </dependency>

 

2.dispatcher-servlet.xml 설정

 

 

노란박스처럼 설정을 해준 뒤 , 빨간 박스안의 order 의 순서를 변경해야한다.

order = "value" 의 값이 낮을수록 우선 순위로 읽어 들이는 것을 고려 하기 때문에

Tiles 의 order value 값이 낮을 수록 Tiles의 구성을 먼저 읽어들인다.

 

    <!-- Tiles 우선순위를 첫번째로 고려하도록 변경  -->
    <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" id="tilesViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>
        <property name="order" value="1"/>
    </bean>

    <!--  Tiles 관련 설정  -->
    <bean class="org.springframework.web.servlet.view.tiles3.TilesConfigurer" id="tilesConfigurer">
        <property name="definitions">
            <list>
                <value>/WEB-INF/tiles/tiles.xml</value>
            </list>
        </property>
    </bean>

 

 


3. tiles.xml 구성

 

위의 dispatcher-servelt.xml 에 설정한 <list>안의 value 위치에 있는 xml 을 만들고 설정을 하자 ( 주황색 박스 )

 

난 이렇게 구성해 뒀다.


(1)
(2)
(3)

(3)은 따라하지 않아도 될거 같다 잠깐 오류생김;

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

<!--
        기본적인 템플릿 생성
        header, body, footer 를 가진 tamplate.jsp 라는 기본 레이아웃을 정의
        이 정의된 레이아웃의 name속성인 base를 상속하여 추가적으로 여러 tiles들을 만들수 있다.
 -->

<tiles-definitions>

    <!--  name과 template의 value는 내가 정하는 것  -->
    <definition name="base" template="/WEB-INF/tiles/template.jsp">
        <put-attribute name="header" value="/WEB-INF/tiles/header.jsp"/>
        <put-attribute name="left" value="/WEB-INF/tiles/left.jsp"/>
        <put-attribute name="body" value=""/>
        <put-attribute name="right" value="/WEB-INF/tiles/right.jsp"/>
        <put-attribute name="footer" value="/WEB-INF/tiles/footer.jsp"/>
    </definition>

    <!--
        메뉴표시
      base를 상속 받은 것.
      body 부분만 설정한 경로대로 갈아 끼우고, 나머지 header, footer는 base의 형식대로 상속받아 오는 것.
      -->
    <definition name="*.page" extends="base">
        <put-attribute name="body" value="/WEB-INF/views/{1}.jsp"/>

    </definition>
    <definition name="*/*.page" extends="base">
        <put-attribute name="body" value="/WEB-INF/views/{1}/{2}.jsp"/>

    </definition>
    <definition name="*/*/*.page" extends="base">
        <put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}.jsp"/>

    </definition>
    <definition name="*/*/*/*.page" extends="base">
        <put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}/{4}.jsp"/>

    </definition>
    <definition name="*/*/*/*/*.page" extends="base">
        <put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}/{4}/{5}.jsp"/>

    </definition>

    <!--
        메뉴 미표시
        페이지 중 로그인 페이지는 보통 header, footer 모두를 레이아웃으로 가지지 않는다.
        다만, header에 js 라이브러리 등을 포함하고 있을 것이므로 이런 특정 경로의 jsp 파일들은 header만 상속박고 footer는 사용하지 않는 방식으로 할 수 있다.
      -->
    <definition name="baseEmpty" template="/WEB-INF/tiles/templateEmpty.jsp">

    </definition>
    <definition name="*.part" template="baseEmpty">
        <put-attribute name="body" value="/WEB-INF/views/{1}.jsp"/>
    </definition>

    <definition name="*/*.part" template="baseEmpty">
        <put-attribute name="body" value="/WEB-INF/views/{1}/{2}.jsp"/>
    </definition>

    <definition name="*/*/*.part" template="baseEmpty">
        <put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}.jsp"/>
    </definition>

    <definition name="*/*/*/*.part" template="baseEmpty">
        <put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}/{4}.jsp"/>
    </definition>

    <definition name="*/*/*/*/*.part" template="baseEmpty">
        <put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}/{4}/{5}.jsp"/>
    </definition>

</tiles-definitions>

 


4. tiles.xml 에 설정을 다 했으면, tiles directroy 를 만들어서 (아니면 원하는 자리에 설정해서 넣어줘도 무방)

각각의 해당하는 JSP 파일을 만들어 주자

header, footer, left(Menu), right(Menu), template, templateEmpty

 

template.jsp 임

이런식으로 원하는 식의 커스텀이 가능하고 원하는 곳에 tiles.xml에 설정한것을 <tiles: insertAttribute> 시켜서 넣어준다.

taglib 선언을 해주자 :: tiles 는 물론이거니와 jstl 이 없으면 안되는거 같다.

같이 선언해주자

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%-- tiles framework 선언부 --%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>

또한 아래에 이런식으로 script도 적어두자 왜적는지는 모르겠던데 그냥 적으셈 ㅎㅎ;

<script type="text/javascript">
    $(function () {

    });

</script>

 

***

참고용 body 부분만 긁어가거나 참고하자

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><tiles:getAsString name="title" ignore="true" /></title>
</head>
<body>
    <table border="1" cellpadding="2" cellspacing="2" align="center">
        <tr>
            <td height="20%" colspan="2">
            	<tiles:insert attribute="header" ignore="true" />
            </td>
        </tr>
        <tr>
            <td width="20%" height="250">
            	<tiles:insert attribute="menu" />
            </td>
            <td>
            	<tiles:insert attribute="body" />
            </td>
        </tr>
        <tr>
            <td height="20%" colspan="2">
            	<tiles:insert attribute="footer" />
            </td>
        </tr>
    </table>
</body>
</html>

5. views에 test 할 jsp 하나를 만들고 컨트롤러에서 실행하자.

 

//    body 부분
    @RequestMapping(value = "/test2")
    public String test2() {

        return "/test2.page";
    }

이렇게 하면 된다. ㅇㅇ

 


6. 결과

 

짠 완성 ㅇㅇ 

 

 

구성이야 입맛대로 꾸미면 되니 알아서 하자.

 


참고사이트

 

https://dzone.com/tutorials/java/struts/struts-example/struts-tiles-example-1.html

 

Struts Tiles Tutorial - DZone

Tiles is used to create reusable presentation components. With Tiles, we first define a base layout with different sections after that we define which jsp page...

dzone.com

 

728x90
반응형