개발/ETC

[tiles] 기본개념 - layout 설정 및 view 호출 방법

신매력 2013. 4. 30. 02:37

Tiles는 웹화면을 각 영역으로 나눠서, 템플릿을 구성하기 쉽게해주는 프레임워크이다.

tiles를 사용하기 위해서는, 

xml 설정파일에 뷰를 렌더링 하게 될 때, tiles를 통해 렌더링 하겠다고 설정해한다.



 head (head.jsp)

 body (view.jsp)

분홍색 영역이 웹페이지 layout이고,

head와 body영역으로 나누었을 때, 서로 다른 jsp 파일로 한 레이아웃을 구성한다. 


head처럼 자주 바뀌지 않는 영역은 내비두고, 

body처럼 내용이 바뀔 부분만 다른 jsp로 교체하기 용이하다.

frame 태그처럼.


간단한 예제를 보자.




1. tiles.xml (레이아웃에 대한 설정)


 <!-- 부모 기본 layout 설정-->
<definition name=".test" template="resources/jsp/layouts/test/layout.jsp">
    <put-attribute name="head" value="resources/jsp/layouts/test/head.jsp" />
    <put-attribute name="body" value="resources/jsp/layouts/test/body.jsp" />
</definition>

<!-- 위의 레이아웃을 상속 받은 액션 호출됐을 때 -->
<definition name="/test" extends=".test">
    <put-attribute name="head" value="resources/jsp/layouts/test/head.jsp" />
    <put-attribute name="body" value="resources/jsp/layouts/test/{1}.jsp" />
</definition>



tiles에는 상속 기능이 있다.


부모 layout에서 head영역은 기본으로 head.jsp를, 

body영역은 body.jsp를 선언해놓았다.


자식 layout에서 head나 body를 선언하지 않으면 

부모에서 선언된 jsp가 호출될 것이다.


위에 예제에서 자식layout에 head를 써놓았지만 head부분은 생략 가능하다.


body 영역에는 와일드카드를 사용하였다. 

request로 온 URL명.jsp가 들어가게 될 것이다.



2. test/layout.jsp (레이아웃 구조)


layout.jsp가 전체 레이아웃이며, 이 속에 head영역과 body영역의 jsp가 들어가도록 설정한다.

(1번의 부모 레이아웃 선언부에 layout.jsp 참조)


<html>
<head>
   <tiles:insertAttribute name="head" />
</head>
<body>
    <tiles:insertAttribute name="body" />
</body>
</html>




3. 컨트롤러 (액션 받는 컨트롤러)

@Controller
@RequestMapping("/test")
public class Test{


    @RequestMapping("/view" 
    public void foo(){}
}




http://marobiana.com/test/view 라고 액션이 들어왔다면 
test 폴더 밑에있는 view.jsp가 body에 삽입이 되고 
헤더를 포함한 레이아웃 전체가 보이게 된다.
위의 메소드는 매핑을 하기 위해서만 사용되므로 내용은 필요없다.